【问题标题】:How to Convert a string without any delimiter to a comma delimited string?如何将没有任何分隔符的字符串转换为逗号分隔的字符串?
【发布时间】:2016-08-04 09:02:19
【问题描述】:

我有一个文件 details.txt,其中存储的数据采用这种格式

        "571955NandhithaF1975-12-222011-12-06Mumbai"    

列是前六位唯一 id , 姓名、(M/F) 性别、出生日期、加入日期和位置 我必须使用逗号分隔符将其分成六列! 请帮我解决这个问题

【问题讨论】:

  • 我在您的文件 sn-p 中看不到逗号。到目前为止,您使用 Mapreduce 取得了什么成就?
  • @waltersu 他想生成一个逗号分隔的字符串。
  • @JimHawkins 完全正确,你明白我的意思。我必须在 map reduce 中处理这个逗号分隔的数据。

标签: hadoop mapreduce hive apache-pig


【解决方案1】:

将每一行传递到包含以下逻辑的正则表达式函数中:

    String expression = "571955NandhithaF1975-12-222011-12-06Mumbai";

    Pattern pattern = Pattern
            .compile("([0-9]{6})([a-zA-Z]+)([M|F])([0-9]{4}-[0-9]{2}-[0-9]{2})([0-9]{4}-[0-9]{2}-[0-9]{2})([a-zA-Z0-9]+)");
    Matcher matcher = pattern.matcher(expression);
    if (matcher.find()) {
        //System.out.println(matcher.group());
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
        System.out.println(matcher.group(3));
        System.out.println(matcher.group(4));
        System.out.println(matcher.group(5));
        System.out.println(matcher.group(6));
    }

输出:

571955
Nandhitha
F
1975-12-22
2011-12-06
Mumbai

【讨论】:

    【解决方案2】:

    571955NandhithaF1975-12-222011-12-06Mumbai

    要拆分这种类型的数据,我们必须在 下的 mapper 类中使用 java 中的 String 函数map 方法。
    您可以使用substring(beginindex,endindex) 方法从字符串中获取 Id,其 像string id[6]=substring(0,5),它返回 6 位字符串,即 ID。(由于 ID 是固定长度,我们取 6)

    您可以使用substring(beginindex) 来获取剩余的字符串。

    接下来,您必须在 java.. 中使用 REGXP split(regexp) 来获取姓名、性别、dob、doj、loc。
    但肯定需要一些使用 java 的锻炼地方。

    通过this link for String functions in java.



    希望这篇文章对您有所帮助。 如果对相同的任何建议或修改也被接受:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 2013-09-30
      • 2018-07-19
      相关资源
      最近更新 更多