对列列表使用循环相当慢。有没有办法通过一次“表扫描”来完成此操作?示例:源表:
FRUIT COLOR
Apple Red
Apple Red
Apple Yellow
Pear Yellow
Pear Yellow
期望的输出:
COLUMN LEVEL COUNT
FRUIT Apple 3
FRUIT Pear 2
COLOR Red 2
COLOR Yellow 3
同样,我们的目标是以有效的方式获取多个分类变量的单向频率。
最佳答案
leleogere的回答达到了我的目的。我发布一个概括供引用:
data = [
('Apple', 'Red' , 'small'),
('Apple', 'Red' , 'small'),
('Apple', 'Yellow', 'large'),
('Pear', 'Yellow', 'large'),
('Pear', 'Yellow', 'large'),
('Orange', 'Orange', 'large')]
varlist = ['FRUIT', 'COLOR', 'SIZE']
import pyspark.sql.functions as F
df = spark.createDataFrame(data, varlist)
stack_string = ', '.join([f"\'{v}\', {v}" for v in varlist])
df.select(
F.expr(f"stack({len(varlist)}, {stack_string}) as (COLUMN, LEVEL)")
).groupBy("COLUMN", "LEVEL").count().sort("COLUMN", "LEVEL").show()
关于apache-spark - 获取 Spark 数据框中所有分类变量的频率的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73529430/