【问题标题】:What is the reason for inconsistent counts in Pyspark, Spark SQL and toPandas().shape?Pyspark、Spark SQL 和 toPandas().shape 中计数不一致的原因是什么?
【发布时间】:2019-07-25 11:29:41
【问题描述】:

我正在研究 databricks cloud 5.4 ML,并为我的分类问题创建了一个训练数据集。在计算记录时,我发现计数不一致,我无法解释。

此外,我检查了我的 Spark DataFrame 不包含 null 或 nan 值。我也在 Pandas 中做了同样的检查。

#train is spark dataframe
train.select([F.count(F.when(F.isnan(c) | F.col(c).isNull(),c)).alias(c) 
   for c in train.columns]).show() #all counts are 0
train.filter((F.col('colname') == "") | F.col('colname').isNull() 
   | F.isnan(F.col('colname'))).count() #count is 0
train.toPandas().isnull().sum().sum() #count is 0

下面是不同的计数值:

train.count() #count is 6011
train.toPandas().shape[0] #count is 6022
-- Spark SQL
-- count is 6012
SELECT COUNT(*)
FROM train
-- Spark SQL
-- count is 5985
SELECT COUNT(colname)
FROM train

我希望 Pyspark、Spark SQL 和 toPandas().shape 生成的记录数相同。你怎么认为?解决方案?

非常感谢。

【问题讨论】:

    标签: pandas apache-spark pyspark apache-spark-sql databricks


    【解决方案1】:

    我找到了问题的答案。我使用子采样创建了我的数据集。原来我需要缓存火车数据帧。否则,惰性评估每次都会重新创建火车火花数据帧。

    ids = dataset.select('id').distinct()
    train_ids = ids.sample(fraction=0.8, seed=3 ,withReplacement=False)
    train_ids.cache()
    train = dataset.join(F.broadcast(train_ids), ['id'], 'inner')
    

    谢谢,保重。

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 2012-06-03
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多