当使用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])
这些操作持续或改组数据导致跨分区一致的数据分布在火花工作。