apache-spark - 获取 Spark 数据框中所有分类变量的频率的有效方法是什么?

标签 apache-spark pyspark

对列列表使用循环相当慢。有没有办法通过一次“表扫描”来完成此操作?示例:源表:

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/

相关文章:

apache-spark - 如何通过聚合在 Hive 中透视数据

python - 如何在 PySpark 中获得不同的字典 RDD?

python - 如何使用 MapReduce 概念找出 HDFS 目录中的重复文档

apache-spark - Spark多维RDD分区

scala - Spark Scala TF-IDF 值排序向量

apache-spark - SparkUI for pyspark - 每个阶段对应的代码行?

apache-spark - 在Kubernetes上发 Spark 。 Kubernetes如何保持有状态的 Spark 性质?

java - Spark中的并行bean类

apache-spark - 无法在python的 yarn 簇模式下读取jceks文件

tsql - Pyspark 中的多个 WHEN 条件实现