替换带引号的字符串中的字符

时间:2014-12-05 05:14:11

标签: java apache-pig

作为我项目的一部分,我有一个CSV文件,其中包含逗号分隔值。但是很少有字段在引号中。因此,数据未正确加载。 例如:如果数据是==>>汽车,鹿,"熊,猫"

在上面的例子中,理想情况下应该有3列。但由于老鼠和垫子之间存在逗号,它被视为4列。田地"老鼠,垫子"没有棍棒,被认为是一个单一的领域。

请建议PIG中是否存在处理此类情况的内容

4 个答案:

答案 0 :(得分:1)

您可以使用apache CSV library来处理此

答案 1 :(得分:0)

你可以试试这个正则表达式:

看看这里,已经问过SO,用户很好地解释了。

click here

答案 2 :(得分:0)

你能试试吗?
input.csv

car,deer,"bear,cat"
car,deer,"bear,cat"

PigScript:输出格式1:

A = LOAD 'input.csv' AS line;
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'(\\w+),(\\w+),(.*)$')) AS (col1:chararray,col2:chararray,col3:chararray);
DUMP B;

<强>输出:

(car,deer,"bear,cat")
(car,deer,"bear,cat")

PigScript输出格式2:

A = LOAD 'input.csv' AS line;
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'(\\w+),(\\w+),"(\\w+),(.*)"$')) AS (col1:chararray,col2:chararray,col3:chararray,col4:chararray);
DUMP B;

<强>输出:

(car,deer,bear,cat)
(car,deer,bear,cat)

答案 3 :(得分:-1)

     public static void main(String[] args) {
        // TODO code application logic here
        String str = "c,b,\"c,d\"";
        System.out.println(str);
           if(str.contains("\"")){
              str= str.replaceAll("\"", " ");
              //System.out.println(str);
              str = str.replaceAll(" ", "");
              System.out.println(str);

           }
    }       

enter image description here