我有一个火花作业,它在dataFrame中读取输入文件,进行一些计算并生成两个输出processed和filtered。
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()来写入两个输出(通常是多个输出)。
您可以通过缓存processed
:
Spark具有将.persist()
数据帧用于将来计算的能力。默认情况下,它将把计算出的数据帧存储在内存中,并在必要时溢出(在驱动程序的生命周期内)到磁盘。