當使用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方法。
解決方案
做下列之一:
- 使用顯式的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])
這些操作持續或改組數據導致跨分區一致的數據分布在火花工作。