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|
+----+----+----+----+