python - 在 pyspark 中拆分列

标签 python apache-spark pyspark

我正在尝试在 pyspark 中拆分数据框 这是我的数据

df = sc.parallelize([[1, 'Foo|10'], [2, 'Bar|11'], [3,'Car|12']]).toDF(['Key', 'Value'])
df = df.withColumn('Splitted', split(df['Value'], '|')[0])

我得到了

+-----+---------+-----+
|Key|Value|Splitted   |
+-----+---------+-----+
|    1|   Food|10|   F|
|    2|   Bar|11 |   B|
|    3|   Caring 12| C|
+-----+---------+-----+

但是我想要

+-----+---------+-----+
|Key  | Value|Splitted|
+-----+---------+-----+
|    1|   10|  Food   |
|    2|   11|  Bar    |
|    3|   12|Caring   |
+-----+---------+-----+

任何人都可以指出我做错了什么吗?

What if i have a unique situation like this?
df = sc.parallelize([[1, 'Foo|10|we'], [2, 'Bar|11|we'], [3,'Car|12|we']]).toDF(['Key', 'Value'])

+---+---------+
|Key|    Value|
+---+---------+
|  1|Foo|10|we|
|  2|Bar|11|we|
|  3|Car|12|we|
+---+---------+

最佳答案

你忘记了 escape 字符,你应该包括转义字符作为

df = df.withColumn('Splitted', split(df['Value'], '\|')[0])

如果你想输出为

+---+-----+--------+
|Key|Value|Splitted|
+---+-----+--------+
|1  |10   |Foo     |
|2  |11   |Bar     |
|3  |12   |Car     |
+---+-----+--------+

你应该这样做

from pyspark.sql import functions as F
df = df.withColumn('Splitted', F.split(df['Value'], '\|')).withColumn('Value', F.col('Splitted')[1]).withColumn('Splitted', F.col('Splitted')[0])

关于python - 在 pyspark 中拆分列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48790246/

相关文章:

apache-spark - 确保 hbase 上的数据局部性

python - pyspark中函数的输入和输出

python - 如何删除 pyspark 中的特殊字符、unicode 表情符号?

python - 快速重新排列文本文件

python - 使用 Steam WebAPI 获取玩游戏的总时间

python - 将 Excel 数据导入 Python 以生成热图

Python- Pandas 按列值的升序减去列值

scala - 在 Spark 中使用 "when"函数填充数据框

scala - Spark 提交时 ClassNotFoundException scala.runtime.LambdaDeserialize

python - pyspark/python 3.6(类型错误 : 'int' object is not subscriptable) list/tuples