簡體   English   中英

有沒有辦法在 Spark 中的單個計算中編寫兩個數據集輸出

[英]Is there a way to write two dataset outputs in single computation in Spark

我有一個 spark 作業,它讀取 dataFrame 中的輸入文件,進行一些計算並生成兩個輸出處理過濾

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() 的單個調用來編寫兩個輸出(通常是多個輸出)。

Spark 有能力.persist()一個數據幀用於未來的計算。 默認情況下,它會將計算出的數據幀存儲在內存中,並在必要時溢出(暫時,在驅動程序的生命周期內)到磁盤。

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

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

您可以通過緩存processed來做到這一點:

Dataset<Row> processed = someFunction(input).cache(); //cache
Dataset<Row> filtered = processed.filter(someCondition);

因為用於生成filtered的數據幀被緩存,Spark 不需要第二次調用someFunction()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM