【问题标题】:RDD Save as Text fileRDD 另存为文本文件
【发布时间】:2016-07-24 14:03:55
【问题描述】:

如何使用 RDD.save 将文本文件保存为带分隔格式的文本文件?我还需要将数据框列写为标题。我该如何实现?

对于大型 RDD,有没有比下面更简单的方法..

List<Row> data = resultFrame.toJavaRDD().collect();
    try {
      File file = new File(fileName);

      if (!file.exists()) {
        file.createNewFile();
      }

      FileWriter fw = new FileWriter(file);

      BufferedWriter bufferedWriter = new BufferedWriter(fw);
      for (Row dataRow:data)
      {
        StringBuilder row  = new StringBuilder();
          for(int i = 0; i<dataRow.size();i++)
          {
            row.append(dataRow.get(i));
            if (i != dataRow.size()-1)
            {
              row.append("~");
            }

          }
        bufferedWriter.write(row.toString());
        bufferedWriter.write("\n");
        row.setLength(0);
      }
      bufferedWriter.close();
    } catch (IOException e) {
      LOGGER.error("Error in writing to the ruf file");
    }

【问题讨论】:

    标签: java csv apache-spark rdd


    【解决方案1】:

    正如您使用 SQLContext.read (Java API) 阅读一样,您需要使用 DataFrame.write (Java API)。

    不推荐使用其他方式(例如 SQLContext.parquetFile、SQLContext.jsonFile)。

    【讨论】:

      【解决方案2】:

      感谢您的回复。以下工作

      public class TildaDelimiter implements Function<Row, String> {
      
        public String call(Row r) {
          return r.mkString("~");
        }
      }
      
      in my save as i did the following to save as a ~ delimited file
      
       resultFrame.toJavaRDD().map(new TildaDelimiter()).coalesce(1, true)
                  .saveAsTextFile(folderName);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-26
        • 1970-01-01
        • 2015-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多