[英]Writing multiple parquet files in parallel
我有一個大的 Spark DataSet
(Java) & 我需要應用過濾器來獲取多個數據集並將每個數據集寫入一個鑲木地板。
Java Spark 是否提供任何可以並行寫入所有 parquet 文件的功能? 我試圖避免它按順序進行。
其他選項是使用 Java Thread
,還有其他方法嗎?
Spark 會自動並行寫入 parquet 文件。 它還取決於您提供的執行器內核數量以及 dataframe 的分區數量。 您可以嘗試使用df.write.parquet("/location/to/hdfs")
並查看寫入時間。
是的,默認情況下,Spark 使用 Spark Executors 提供並行性,但如果也想在 Driver 上實現並行性,那么您可以執行以下操作:
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import java.util.ArrayList;
import java.util.List;
public class ParallelSparkWrite {
public static void main(String[] args) {
SparkSession spark = Constant.getSparkSess();
Dataset<Row> ds = spark.read().json("input/path");
List<String> filterValue = new ArrayList<>();
//Create a parallel stream
filterValue.parallelStream()
.forEach(filter -> {
//Filter your DataSet and write in parallel
ds.filter(ds.col("col1").equalTo(filter)).write().json("/output/path/"+filter+".json");
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.