Pyspark Spark结构化流时,DataFrame中的字符串列如何拆分为多个列

Pyspark Spark结构化流时,DataFrame中的字符串列如何拆分为多个列,pyspark,Pyspark,这是当前代码: 从pyspark.sql导入SparkSession park_会话=SparkSession\ 建筑商先生\ .appName(“测试”)\ .getOrCreate() lines=spark_会话\ .readStream\ .格式(“套接字”)\ .选项(“主机”、“127.0.0.1”)\ .选项(“端口”,9998)\ .load() “线条”如下所示: +-------------+ |价值观| +-------------+ |a、b、c| +----------

这是当前代码:

从pyspark.sql导入SparkSession
park_会话=SparkSession\
建筑商先生\
.appName(“测试”)\
.getOrCreate()
lines=spark_会话\
.readStream\
.格式(“套接字”)\
.选项(“主机”、“127.0.0.1”)\
.选项(“端口”,9998)\
.load()
“线条”如下所示:
+-------------+
|价值观|
+-------------+
|a、b、c|
+-------------+
但我想看起来像这样:
+---+---+---+
|a | b | c|
+---+---+---+
我尝试使用“split()”方法,但不起作用。您只能将每个字符串拆分为列中的列表,而不能拆分为多列


我应该怎么做?

拆分值列,并通过访问
数组索引
(或)
元素(从spark-2.4)
(或)
getItem()
函数



如果您有不同数量的分隔符,而不是每行3个分隔符,则可以使用以下分隔符:

输入:

+-------+
|value  |
+-------+
|a,b,c  |
|d,e,f,g|
+-------+

解决方案

import pyspark.sql.functions as F

max_size = df.select(F.max(F.length(F.regexp_replace('value','[^,]','')))).first()[0]
out = df.select([F.split("value",',')[x].alias(f"Col{x+1}") for x in range(max_size+1)])

输出

out.show()

+----+----+----+----+
|Col1|Col2|Col3|Col4|
+----+----+----+----+
|   a|   b|   c|null|
|   d|   e|   f|   g|
+----+----+----+----+

谢谢您的回答,但什么是'col()'是方法?我没用过。我很抱歉;我没来过long@NickWick,
col()
用于从数据帧访问列。。i、 e
行。value
行[“value”]
列(“value”)
都是指pyspark中的
value
列。感谢您的仔细解释。我现在明白了
import pyspark.sql.functions as F

max_size = df.select(F.max(F.length(F.regexp_replace('value','[^,]','')))).first()[0]
out = df.select([F.split("value",',')[x].alias(f"Col{x+1}") for x in range(max_size+1)])
out.show()

+----+----+----+----+
|Col1|Col2|Col3|Col4|
+----+----+----+----+
|   a|   b|   c|null|
|   d|   e|   f|   g|
+----+----+----+----+