CREATE TABLE formatted_data(
col1 string,col2 string,
col3 string,col4 string,
col5 string,col6 string,col7 string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|';
3) 将数据从tmp表插入格式化的数据表:
INSERT INTO formatted_data
select substr(raw,0, 4),substr(raw,4, 9),substr(raw,9, 12),
substr(raw,12, 18),substr(raw,18, 22),substr(raw,22, 24),
substr(raw,24,26) from TMP ;
4) 验证“格式化的数据”表的hdfs文件
hadoop fs -cat /hive/warehouse/formatted_data/000000_0
16/08/30 10:47:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
0010|012489MAR|9MAR01856400|R01856400004400|400004400|04400|400
0010|012489FEB|9FEB01856400|B01856400004400|400004400|04400|400
2条答案
按热度按时间0s7z1bwu1#
另一种方法是使用hive(负责编程部分)
1) 创建一个指向hdfs原始数据文件位置的配置单元tmp表,
2) 用管道分隔器创建格式化的数据表
3) 将数据从tmp表插入格式化的数据表:
4) 验证“格式化的数据”表的hdfs文件
icnyk63a2#
这可以通过map reduce或spark job实现(
substring()
):MapReduce(java):在这种情况下,您只需要mapper。只需将输入字符串行与分隔的字符串行Map:
Spark(scala):
更新:
你可以用
file:///
uri,让hadoop知道如何查找本地文件系统作为源(spark适用相同的规则):例子:
您可以在中有源文件
hdfs
并在处理成功后删除应用程序本身的源文件:创建
oozie
运行向目标目标添加分隔符的应用程序和在结尾处删除源文件/目录的shell脚本的工作流