繁体   English   中英

并行编写多个 parquet 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM