【发布时间】:2021-10-16 07:49:21
【问题描述】:
我有一个如下所示的数据框:
df = spark.sql("""
SELECT list
FROM categories
""")
df.show()
| list |
|---|
| 1,1,1,2,2,apple |
| apple,orange,1,2 |
我想要这样的结果
| list | frequency_count |
|---|---|
| 1 | 4 |
| 2 | 3 |
| apple | 2 |
| orange | 1 |
这是我尝试过的。
count_df = df.withColumn('count', F.size(F.split('list', ',')))
count_df.show(truncate=False)
df.createOrReplaceTempView('tmp')
freq_sql = """
select list,count(*) count from
(select explode(flatten(collect_list(split(list, ',')))) list
from tmp)
group by list
"""
freq_df = spark.sql(freq_sql)
freq_df.show(truncate=False)
我收到了这个错误
AnalysisException: cannot resolve 'split(df.`list`, ',', -1)' due to data type mismatch: argument 1 requires string type, however, 'df.`list`' is of array<string> type.;
【问题讨论】:
-
为什么不只是
SELECT col, COUNT(*) FROM categories c LATERAL VIEW EXPLODE(list) l GROUP BY col ORDER BY col DESC。如果它已经是一个数组,不确定是否需要拆分它。
标签: apache-spark apache-spark-sql jupyter-notebook