使用Pyspark根据分组依据创建新列

大通哈丁

我有一个场景,我必须从分组中获取结果并创建一个新列。

例如,说我有以下数据:

| Tool         | Category   | Price      |
| Hammer       | Hand Tool  | 25.00      |
| Drill        | Power Tool | 56.33      |
| Screw Driver | Hand Tool  | 4.99       |

我的输出应如下所示:

| Tool         | Hand Tool | Power Tool |
| Hammer       | 25.00     | NULL       |
| Drill        | NULL      | 56.33      |
| Screw Driver | 4.99      | NULL       |

我不确定如何获得此输出。我正在尝试下面的代码片段,但它会炸毁column is not iterable

def get_tool_info():
    return tool_table.groupBy('Category').pivot('Price', 'Category')

动态生成这些新列并分配价格值的最佳方法是什么?

乔纳森·奥海克斯

尝试这个 :

from pyspark.sql.types import StructType, StructField, StringType, FloatType
import pyspark.sql.functions as F

schema = StructType([StructField("Tool", StringType()), StructField("Category", StringType()), StructField("Price", FloatType())])
data = [["Hammer", "Hand Tool", 25.00], ["Drill", "Power Tool", 56.33], ["Screw Driver", "Hand Tool", 4.99]]
df = spark.createDataFrame(data, schema)

df.groupby("Tool").pivot("Category").agg(F.first("Price")).show()

输出:

+------------+---------+----------+
|        Tool|Hand Tool|Power Tool|
+------------+---------+----------+
|       Drill|     null|     56.33|
|Screw Driver|     4.99|      null|
|      Hammer|     25.0|      null|
+------------+---------+----------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章