我正在pig中加载一个文件,其分隔符为“^a^e^a”我试过下面的命令,但它不工作。
data = LOAD 'test.txt' USING PigStorage('\u0001\u0005\u0001') AS (user, time, query);
我错过什么了吗?或者有没有办法直接使用pigstorage指定上述分隔符?怎样?谢谢。
qojgxg4l1#
file_data=使用textloader()加载“thedata.csv”;cleaning|data=foreach file|data generate replace($0,'\u0001 |\u0005|\u0001','');使用pigstorage()将cleaning_数据存储到“tmp/cleaning_data.txt”中;final_data=load'tmp/cleaning_data.txt',使用pigstorage(',')作为(用户、时间、查询);
v9tzhpje2#
将数据加载为line:chararray将“\u0001\u0005\u0001”替换为“|”或“,”使用“|”或“,”拆分结果行以生成所需的列。
data = LOAD 'test.txt' as (line:chararray); clean_data = foreach data generate REPLACE(line,'\\u0001\\u0005\\u0001','|'); new_data = foreach clean_data generate SPLIT(clean_data.$0,'|');
pgvzfuti3#
我相信pigstorage不会支持多个ctrl分隔符,您可能需要编写udf来实现这一点。
3条答案
按热度按时间qojgxg4l1#
file_data=使用textloader()加载“thedata.csv”;cleaning|data=foreach file|data generate replace($0,'\u0001 |\u0005|\u0001','');使用pigstorage()将cleaning_数据存储到“tmp/cleaning_data.txt”中;final_data=load'tmp/cleaning_data.txt',使用pigstorage(',')作为(用户、时间、查询);
v9tzhpje2#
将数据加载为line:chararray
将“\u0001\u0005\u0001”替换为“|”或“,”
使用“|”或“,”拆分结果行以生成所需的列。
pgvzfuti3#
我相信pigstorage不会支持多个ctrl分隔符,您可能需要编写udf来实现这一点。