根据EDIP的flg文件生成测试数据。
30张表,一个表1亿,而且要生成在硬盘而不是hdfs,但直接生成在硬盘就用不了spark了,所以先生成在hdfs,然后下载到硬盘,为了防止hdfs空间不足,暂时先把hdfs的副本书改为1。hdfs副本书改为1,只对新数据有效,旧数据还是原来的3个副本。
process:
读EDIP的flag文件,形成一个List<String[]>,然后生成1个template,然后遍历写入到hdfs,然后从hdfs下载到本地硬盘。
trap
1. flg文件的date和dt类型不显示长度,需要使用2个起止位置相减 + 1
来获取长度
2. date和dt类型的信息跟普通的char类型不同,格式不同,注意split分割符的设置
3. mapping信息和edip信息的字段长度有可能不一致,要注意,字段设的比EDIP的短可以补空格,长了就会有问题,导致截取不正常
4. scala中,使用f"str%10s"
可以在字符串的前面补空格
,但这里面的长度也就是上例中的10不能传变量,原因未知。在后面补空格用f"str%-10s"
5. hdfs的javaAPI中,如果要递归删文件夹,args1要设为true
6. hdfs的javaAPI中,不能直接下载文件夹,要循环里面的文件挨个下载。但这些文件可以共用一个输出流,也就是说可以直接写入到1个文件中。
7. 对IO流的理解
以程序为中介、为加工中心,可以在不同设备之间传数据。
比如以hdfs为输入流,以本地磁盘为输出流,使用程序读入和写出,程序就是个加工、处理中心。