【问题标题】:How to load data in pig with more than one ctrl delimiter如何使用多个 ctrl 分隔符在 pig 中加载数据
【发布时间】:2016-10-16 18:56:21
【问题描述】:

我在 pig 中加载一个分隔符为 '^A^E^A' 的文件

我尝试了下面的命令,但是它不起作用。

data = LOAD 'test.txt' USING PigStorage('\u0001\u0005\u0001') AS (user, time, query);

我错过了什么吗?或者有没有办法直接使用 PigStorage 指定上述分隔符?怎么样?

谢谢。

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    将数据加载为 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,'|');
    

    【讨论】:

      【解决方案2】:

      我相信 PigStorage 不会支持多个 ctrl delimiter ,您可能必须编写 UDF 来实现这一点。

      【讨论】:

        【解决方案3】:

        File_Data = LOAD 'thedata.csv' USING TextLoader(); Cleansing_Data = FOREACH File_Data GENERATE REPLACE($0,'\u0001|\u0005\|\u0001',''); STORE Cleansing_Data INTO 'tmp/Cleansing_Data.txt' 使用 PigStorage(); Final_Data = LOAD 'tmp/Cleansing_Data.txt' USING PigStorage(',') AS(用户、时间、查询);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 1970-01-01
          • 2018-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多