【发布时间】:2019-12-05 03:05:41
【问题描述】:
我想计算一列中每个类别的频率,并将列中的值替换为频率计数。我想为 pyspark 数据框的 pyspark 中的多个列执行此操作。
例如,考虑以下数据框:
+-------+-------+-------+
| col_1 | col_2 | col_3 |
+-------+-------+-------+
| a | f | g |
| c | e | a |
| a | d | g |
| a | d | g |
| b | f | b |
| c | d | g |
| b | d | c |
| a | d | g |
| b | f | g |
+-------+-------+-------+
我想将此 pyspark 数据帧转换为以下内容:
+-------+-------+-------+
| col_1 | col_2 | col_3 |
+-------+-------+-------+
| 4 | 3 | 6 |
| 2 | 1 | 1 |
| 4 | 5 | 6 |
| 4 | 5 | 6 |
| 3 | 2 | 1 |
| 2 | 5 | 6 |
| 3 | 5 | 1 |
| 4 | 5 | 6 |
| 3 | 2 | 6 |
+-------+-------+-------+
我有以下代码:
spark = SparkSession.builder.getOrCreate()
df = spark.read.parquet(data)
df.show()
+-------+-------+-------+
| col_1 | col_2 | col_3 |
+-------+-------+-------+
| a | f | g |
| c | e | a |
| a | d | g |
| a | d | g |
| b | f | b |
| c | d | g |
| b | d | c |
| a | d | g |
| b | f | g |
+-------+-------+-------+
我可以使用以下代码使用 for 循环计算每列的频率:
df.groupby('col_1').count().toDF('category', 'count').show()
我知道我可以对每一列都执行此操作并将结果粘合在一起。我想知道是否有更好的方法。
【问题讨论】: