是否有一种方法可以在Spark中通过一次计算写入两个数据集输出

问题描述 投票:1回答:2

我有一个火花作业,它在dataFrame中读取输入文件,进行一些计算并生成两个输出processedfiltered

Dataset<Row> input = sparkSession.read().parquet(inputPath);
Dataset<Row> processed = someFunction(input);
Dataset<Row> filtered = processed.filter(someCondition);

processed.write().parquet(outputPath1);
filtered.write().parquet(outputPath2);

我观察到在代码执行期间,someFunction()被调用了两次(一次写入时处理,而另一次写入时过滤,这是由于spark中的惰性求值)。是否可以通过一次调用someFunction()来写入两个输出(通常是多个输出)。

java apache-spark apache-spark-sql apache-spark-dataset
2个回答
1
投票

您可以通过缓存processed


1
投票

Spark具有将.persist()数据帧用于将来计算的能力。默认情况下,它将把计算出的数据帧存储在内存中,并在必要时溢出(在驱动程序的生命周期内)到磁盘。

© www.soinside.com 2019 - 2024. All rights reserved.