【问题标题】:How do I split one column in a dataframe into multiple columns based on a defined size如何根据定义的大小将数据框中的一列拆分为多列
【发布时间】:2019-05-24 06:13:47
【问题描述】:

我想将固定宽度的数据框中的行转换为分隔数据:

如何在 java/JavaRDD 中实现这一点。

输入数据框: df.show()

c0

|WAAAAAAWone|

|QBAAAAAWtwo|

输出:应该用竖线(|)分隔。

co |c1 | c2

W |AAAAAA|赢了|

问 |BAAAAAA|Wtwo|

【问题讨论】:

    标签: java apache-spark-sql


    【解决方案1】:

    您可以使用String.substring(int start, int end) 轻松完成此操作。这是您需要的方法的工作实现。

    public static String parseData(String data) {
        String ret = "c0|c1|c2";
    
        // Remove edge delimiters
        data = data.replaceAll("\\|", "");
    
        // Split rows
        String[] rows = data.split("\n");
    
        // Iterate through each row
        for(String row : rows) {
            // We end up with extra empty strings because of pipe delimiting, skip them
            if("".equals(row)) continue;
    
            // Check row length, throw exception if incorrect
            if(row.length() != 11) {
                String message = String.format("Row passed to parseData() was the wrong length! Expected 11, got %d", row.length());
                throw new IllegalArgumentException(message);
            }
    
            String col1 = row.substring(0,1);  // Get column one (length=1)
            String col2 = row.substring(1,7);  // Get column 2 (length=6)
            String col3 = row.substring(7,11); // Get column 3 (length=4)
    
            // Add delimited row to return string
            ret += (String.format("\n%s|%s|%s", col1, col2, col3));
        }
        return ret;
    }
    

    我测试过了。 parseData("|WAAAAAAWone|\n|QBAAAAAWtwo|") 返回:

    c0|c1|c2
    W|AAAAAA|Wone
    Q|BAAAAA|Wtwo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2020-01-08
      • 2019-12-25
      相关资源
      最近更新 更多