仅在第一个实例上拆分pyspark列
这是对所提问题的丰富。仅在第一个实例上拆分pyspark列,pyspark,split,Pyspark,Split,这是对所提问题的丰富。 子字符串函数工作得更好,因为它不仅限于正则表达式字符。 但是,如果要拆分的列始终具有分隔字符,则上述问题的答案满足要求。 如果我有这样一个数据帧c1: +-----------------+ | name| +-----------------+ | ETX2800_PM3| | ETX2800_PM3| | STP2372| | STP2372| | ETX2800_PM3| |T
子字符串
函数工作得更好,因为它不仅限于正则表达式字符。
但是,如果要拆分的列始终具有分隔字符,则上述问题的答案满足要求。
如果我有这样一个数据帧c1
:
+-----------------+
| name|
+-----------------+
| ETX2800_PM3|
| ETX2800_PM3|
| STP2372|
| STP2372|
| ETX2800_PM3|
|TRK2353_CGRA_3_35|
|TRK2353_CGRA_3_35|
如果我使用拆分方法:
c2=c1.withColumn('first split', f.expr("""substring(name,instr(name,'_')+1,length(name))"""))
我明白了
但是我希望第3行和第4行中的null
。
有没有办法做到这一点?使用比使用
regex
更可读的udf
:
def fun(x):
s = x.split("_",1)
return s[-1] if len(s)>1 else None
myudf = F.udf(fun,StringType())
df.withColumn("Spl",myudf("name")).show()
def fun(x):
s = x.split("_",1)
return s[-1] if len(s)>1 else None
myudf = F.udf(fun,StringType())
df.withColumn("Spl",myudf("name")).show()
+-----------------+---------+
| name| Spl|
+-----------------+---------+
| ETX2800_PM3| PM3|
| ETX2800_PM3| PM3|
| STP2372| null|
| STP2372| null|
| ETX2800_PM3| PM3|
|TRK2353_CGRA_3_35|CGRA_3_35|
|TRK2353_CGRA_3_35|CGRA_3_35|
+-----------------+---------+