为了账号安全,请及时绑定邮箱和手机立即绑定

PySpark - 按行和列计算不同

PySpark - 按行和列计算不同

侃侃尔雅 2022-10-06 17:04:23
您能否建议如何计算以下情况的不同值。我在 PySpark 中有数据框(列:'Rank'、'Song'、'Artist'、'Year'、'Lyrics'、'Source')。“歌词”列包含字符串值,应按单词划分。我已经计算了“歌词”列中每一行的所有单词数。我还将字符串转换为列表,将结果保存在新列“uniqWords_count”中。不幸的是,我无法弄清楚如何投入和计算不同的价值。如果它可能有用,这是代码:billdf = billdf.withColumn('allWords_count', f.size(f.split(f.col('Lyrics'), ' ')))billdf = billdf.withColumn('uniqWords_count', f.split(f.col('Lyrics'), ' '))试图应用 countDistinct 函数,但它导致了错误:billdf = billdf.withColumn('uniqWords_count', f.countDistinct(f.split(f.col('Lyrics'), ' ')))Py4JJavaError:调用 o3784.withColumn 时出错。:org.apache.spark.sql.AnalysisException:分组表达式序列为空,并且' Song'不是聚合函数。如果您不在乎得到哪个值,则将'(count(DISTINCT split( Lyrics, ' ', -1)) AS uniqWords_count)' 包装在窗口函数中或将 ' ' 包装在 first() (或 first_value)中。;;Song
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

Mohammad Murtaza Hashmi提出了一个解决方案。就我而言,它看起来像这样:

billdf = billdf.withColumn('uniqWords',f.size(f.array_distinct("uniqWords")))

非常感谢您的帮助!


查看完整回答
反对 回复 2022-10-06
  • 1 回答
  • 0 关注
  • 55 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信