我有一个包含两个列的json文件。第二列是一个字符串。该字符串的结构如下所示:
"x#y#z"
"aa#bbc#cd"
因此,字符串由多个子字符串组成,以#分隔。每行的子字符串数相同。 我想将字符串拆分为数据帧的列,我可以使用一些子字符串函数来实现,但是正在寻找一种更简单的方法,特别是因为我的真实数据有20个子字符串。这是我当前的pyspark代码:
data = """
{"a":1, "b":"x#y#z"}
{"a":2, "b":"aa#bbc#cd"}
"""
dbutils.fs.put(inputpath + "/001.json", data, True)
from pyspark.sql.functions import *
df = spark.read.format("json").load(inputpath) \
.select ("a", "b").withColumn("b1", substring_index('b', "#", 1))
df.show()
+---+---------+---+
| a| b| b1|
+---+---------+---+
| 1| x#y#z| x|
| 2|aa#bbc#cd| aa|
+---+---------+---+
答案 0 :(得分:0)
您可以为此使用split(请参见here)。它在模式周围分割字符串(模式是一个正则表达式)。结果是一个数组。这样,您可以轻松访问字符串中的元素:
from pyspark.sql.functions import *
df = spark.read.format("json").load(inputpath) \
.select ("a", "b").withColumn("c", split("b", "#")) \
.selectExpr("a", "b", "c", "c[0] as b0", "c[1] as b0", "c[2] as b2")
数据框将如下所示:
+---+---------+-------------+---+---+---+
| a| b| c| b0| b0| b2|
+---+---------+-------------+---+---+---+
| 1| x#y#z| [x, y, z]| x| y| z|
| 2|aa#bbc#cd|[aa, bbc, cd]| aa|bbc| cd|
+---+---------+-------------+---+---+---+
希望这会有所帮助。