randomSplit方法的行為

學習使用磚中的randomSplit方法時不一致的行為。

寫的亞當Pavlacka

去年發表在:2022年5月31日

當使用randomSplitDataFrame的話,你有可能觀察到的不一致的行為。這是一個例子:

% python df = spark.read.format (inconsistent_data_source) .load () a, b = df.randomSplit ([0.5, 0.5]) a.join(廣播(b),在=“id”,如何=“內在”).count ()

通常該查詢返回0。然而,根據基礎數據源或輸入DataFrame,在某些情況下,查詢可能導致超過0記錄。

這一出人意料的行為是解釋這一事實數據分布在抽樣分區不是冪等,並且可以重新安排或更新查詢執行期間,因此影響的輸出randomSplit方法。

刪除

信息

火花DataFrames和抽樣保存分區秩序;這個問題隻存在在查詢輸出取決於跨分區分布的實際數據,例如,值從文件1、2和3總是出現在分區1

這個問題也可以觀察到當使用三角洲緩存(AWS|Azure|GCP)。下麵列出的所有解決方案在這種情況下仍然適用。

解決方案

做下列之一:

  • 使用顯式的Apache火花抽樣緩存
    % python df = inputDF.cache () a、b = df.randomSplit ([0.5, 0.5])
  • 重新分配的一列或一組列
    python df = inputDF %。重新分區(100年,“col1”), b = df.randomSplit ([0.5, 0.5])
  • 應用一個聚合函數
    % python df = inputDF.groupBy (col1) .count () a, b = df.randomSplit ([0.5, 0.5])

這些操作持續或改組數據導致跨分區一致的數據分布在火花工作。

這篇文章有用嗎?