首页 > 解决方案 > pyspark groupby 使用 String groupby 键在输出中生成多行

问题描述

pyspark groupby 操作不会为大型数据集生成唯一的组键

我在最终输出中看到重复的键。

 new_df = df.select('key','value') \
        .where(...) \
        .groupBy('key') \
        .count() 

例如,上面的查询为 groupBy 列(键)返回多行。groupby column('key') 的数据类型是字符串。

我通过做将输出存储在CSV中

new_df.write.format("csv") \
        .option("header", "true") \
        .mode("Overwrite") \
        .save(CSV_LOCAL_PATH)

例如 CSV 中的输出有重复的行

key1, 10
key2, 20
key1, 05

在 Spark 2.4.3 和 2.3 中测试有重复。键没有区别。这发生在多个 KEYS 上。

当我计算特定键的行数时,它给出 1。

new_df.select('key','total')\
 .where((col("key") == "key1"))\
 .count()

我不确定 pyarrow 设置是否有任何区别。我之前启用过。我尝试启用和禁用 pyarrow 但结果相同。

spark.conf.set("spark.sql.execution.arrow.enabled", "true")

标签: sqlpyspark

解决方案


我发现问题出在保存到忽略空格的 CSV 时。添加以下选项有助于解决它。

 .option("ignoreLeadingWhiteSpace", "false")\
 .option("ignoreTrailingWhiteSpace", "false")

推荐阅读