python - PySpark 从现有列创建具有值列表的新列
问题描述
我有一个这样的DataFrame:
from pyspark.sql import SparkSession
from pyspark import Row
spark = SparkSession.builder \
.appName('DataFrame') \
.master('local[*]') \
.getOrCreate()
df = spark.createDataFrame([Row(a=1, b='', c=['0', '1'], d='foo'),
Row(a=2, b='', c=['0', '1'], d='bar'),
Row(a=3, b='', c=['0', '1'], d='foo')])
| a| b| c| d|
+---+---+------+---+
| 1| |[0, 1]|foo|
| 2| |[0, 1]|bar|
| 3| |[0, 1]|foo|
+---+---+------+---+
我想用列"e"
的第一个元素"c"
和"f"
列的第二个元素创建"c"
列”,看起来像这样:
|a |b |c |d |e |f |
+---+---+------+---+---+---+
|1 | |[0, 1]|foo|0 |1 |
|2 | |[0, 1]|bar|0 |1 |
|3 | |[0, 1]|foo|0 |1 |
+---+---+------+---+---+---+
解决方案
df = spark.createDataFrame([Row(a=1, b='', c=['0', '1'], d='foo'),
Row(a=2, b='', c=['0', '1'], d='bar'),
Row(a=3, b='', c=['0', '1'], d='foo')])
df2 = df.withColumn('e', df['c'][0]).withColumn('f', df['c'][1])
df2.show()
+---+---+------+---+---+---+
|a |b |c |d |e |f |
+---+---+------+---+---+---+
|1 | |[0, 1]|foo|0 |1 |
|2 | |[0, 1]|bar|0 |1 |
|3 | |[0, 1]|foo|0 |1 |
+---+---+------+---+---+---+
推荐阅读
- python - Google Calendar API:删除事件不会删除事件 ID
- c - 如何在 mu C 项目中获取 GL 类型或确保浮点/双精度类型的位数?
- javascript - 更改未点击按钮的按钮不透明度
- linux-kernel - UBI 无法附加 mtd3
- javascript - 警告:道具类型失败:提供给“图像”的道具“来源”无效。我在对象中使用 require() 保存了图像的路径
- redis - 关机或重启时保持 Celery Queue
- unity3d - unity Frustum Culling with drawmesh 太早了
- python-3.x - Python:同时从两个 websocket 获取数据并处理它
- c++ - 为什么不能被 4 整除且宽度大于 32 像素的位图图像在创建像素数据数组时会导致错误的行扫描?
- authentication - Keycloak:有没有办法在使用“更新配置文件”所需的操作时使名字和姓氏不可编辑?