Spark 另存为按键分组的文本文件

Spark Save as Text File grouped by Key

我想将 RDD 保存到按键分组的文本文件中,目前我不知道如何将输出拆分为多个文件,似乎跨越共享同一分区的多个键的所有输出都被写入到同一个文件。我想每个键都有不同的文件。这是我的代码片段:

JavaPairRDD<String, Iterable<Customer>> groupedResults = customerCityPairRDD.groupByKey();

groupedResults.flatMap(x -> x._2().iterator())
              .saveAsTextFile(outputPath + "/cityCounts");

这可以通过使用 foreachPartition 将每个分区保存到单独的文件中来实现。

您可以按如下方式开发您的代码

groupedResults.foreachPartition(new VoidFunction<Iterator<Customer>>() {


@Override
public void call(Iterator<Customer> rec) throws Exception {
  FSDataOutputStream fsoutputStream = null;
  BufferedWriter writer = null;

  try {
    fsoutputStream = FileSystem.get(new Configuration()).create(new Path("path1"))
    writer = new BufferedWriter(fsoutputStream)

    while (rec.hasNext()) {
      Customer cust = rec.next();
      writer.write(cust)
    }
  } catch (Exception exp) {
    exp.printStackTrace()
    //Handle exception
  }
  finally {
    // close writer.
  }
}
});

希望对您有所帮助。

拉维

所以我想到了解决这个问题的方法。将 RDD 转换为 Dataframe,然后在写入期间按键分区。

Dataset<Row> dataFrame = spark.createDataFrame(customerRDD, Customer.class);
dataFrame.write()
         .partitionBy("city")
         .text("cityCounts");  // write as text file at file path cityCounts