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])

这些操作持续或改组数据导致跨分区一致的数据分布在火花工作。

这篇文章有用吗?