该列在一行中多次使用分隔符,因此 split
不是那么简单。
拆分时,在这种情况下只需考虑第一个分隔符。
到目前为止,我正在这样做。
不过,我觉得能有更好的解决办法吗?
testdf= spark.createDataFrame([("Dog", "meat,bread,milk"), ("Cat", "mouse,fish")],["Animal", "Food"])
testdf.show()
+------+---------------+
|Animal| Food|
+------+---------------+
| Dog|meat,bread,milk|
| Cat| mouse,fish|
+------+---------------+
testdf.withColumn("Food1", split(col("Food"), ",").getItem(0))\
.withColumn("Food2",expr("regexp_replace(Food, Food1, '')"))\
.withColumn("Food2",expr("substring(Food2, 2)")).show()
+------+---------------+-----+----------+
|Animal| Food|Food1| Food2|
+------+---------------+-----+----------+
| Dog|meat,bread,milk| meat|bread,milk|
| Cat| mouse,fish|mouse| fish|
+------+---------------+-----+----------+
3条答案
按热度按时间szqfcxe21#
我只想用
string functions
,没有理由使用regex。ktca8awb2#
稍微不同的方法是使用切片和修剪:
首次使用
split
首先生成数组。接下来,我们使用singlesparksql访问器访问这些项a[0]
填充头部和slice
一起trim
对于数组的尾部。zkure5ic3#
一种使用正则表达式从列表中只拆分第一个匹配项的方法