我有一个很大的Spark DataSet
(Java),我需要应用过滤器以获取多个数据集并将每个数据集写入一个镶木地板。
Java Spark是否提供任何功能可以并行写入所有镶木地板文件?我正在尝试避免按顺序进行操作。
其他选项是使用Java Thread
,还有其他方法吗?
Spark将自动并行并行写入镶木地板文件。它还取决于您提供了多少个执行程序内核以及数据帧的分区数量。您可以尝试使用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");
});
}
}