Java 并行写入多个拼花文件
我有一个大的SparkJava 并行写入多个拼花文件,java,apache-spark,Java,Apache Spark,我有一个大的SparkDataSet(Java)&我需要应用过滤器来获取多个数据集,并将每个数据集写入一个拼花地板 Java Spark是否提供了可以并行写入所有拼花地板文件的功能?我试着避免它,按顺序做 另一个选项是使用JavaThread,还有其他方法吗?Spark将自动并行写入拼花地板文件。它还取决于您提供了多少executor核心以及数据帧的分区数。您可以尝试使用df.write.parquet(“/location/to/hdfs”)并查看写入的时间。Spark将自动并行写入拼花文件。
DataSet
(Java)&我需要应用过滤器来获取多个数据集,并将每个数据集写入一个拼花地板
Java Spark是否提供了可以并行写入所有拼花地板文件的功能?我试着避免它,按顺序做
另一个选项是使用Java
Thread
,还有其他方法吗?Spark将自动并行写入拼花地板文件。它还取决于您提供了多少executor核心以及数据帧的分区数。您可以尝试使用df.write.parquet(“/location/to/hdfs”)
并查看写入的时间。Spark将自动并行写入拼花文件。它还取决于您提供了多少executor核心以及数据帧的分区数。您可以尝试使用df.write.parquet(“/location/to/hdfs”)
并查看写入时间。默认情况下,Spark使用Spark执行器提供并行性,但如果您也想在驱动程序上实现并行性,则可以执行以下操作:
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");
});
}
}
import org.apache.spark.sql.Dataset;
导入org.apache.spark.sql.Row;
导入org.apache.spark.sql.SparkSession;
导入java.util.ArrayList;
导入java.util.List;
公共类并行SparkWrite{
公共静态void main(字符串[]args){
SparkSession spark=Constant.getSparkess();
数据集ds=spark.read().json(“输入/路径”);
List filterValue=new ArrayList();
//创建并行流
filterValue.parallelStream()
.forEach(过滤器->{
//过滤数据集并并行编写
ds.filter(ds.col(“col1”).equalTo(filter)).write().json(“/output/path/”+filter+”.json”);
});
}
}
默认情况下,Spark使用Spark执行器提供并行性,但如果您也想在驱动程序上实现并行性,则可以执行以下操作:
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");
});
}
}
import org.apache.spark.sql.Dataset;
导入org.apache.spark.sql.Row;
导入org.apache.spark.sql.SparkSession;
导入java.util.ArrayList;
导入java.util.List;
公共类并行SparkWrite{
公共静态void main(字符串[]args){
SparkSession spark=Constant.getSparkess();
数据集ds=spark.read().json(“输入/路径”);
List filterValue=new ArrayList();
//创建并行流
filterValue.parallelStream()
.forEach(过滤器->{
//过滤数据集并并行编写
ds.filter(ds.col(“col1”).equalTo(filter)).write().json(“/output/path/”+filter+”.json”);
});
}
}
那太好了,我不知道。如果这回答了你的问题,请接受它作为答案,或者让我知道那太好了,我不知道。如果这回答了你的问题,请接受它作为答案,或者让我知道它是否值得?是的,如果需要,我们可以使用空闲驱动程序内核在ScalaInteresting中使用ForkPool,我需要考虑一下。Par熟悉,但无论我在哪里工作,它保持简单。值得吗?是的,我们可以利用闲置驱动核心(S),如果需要使用FurkPoin在SaaLaLoad,需要考虑一下。熟悉,但无论我在哪里工作,都要保持简单。