【发布时间】:2019-10-25 23:24:27
【问题描述】:
我有一个 DataFrame,其中有一列 ArrayType(StringType):
+------------------------------------+
|colname |
+------------------------------------+
|[foo_XX_foo, bar_YY_bar] |
|[qwe_ZZ_rty, asd_AA_fgh, zxc_BB_vbn]|
+------------------------------------+
我现在想提取第一个和第二个_ 之间的字符串,即预期的输出是:
+------------+
|newcolname |
+------------+
|[XX, YY] |
|[ZZ, AA, BB]|
+------------+
在this answer 之后,我尝试将expr() 与transform 一起使用,但我没有设法让它工作。即使将所有字符串更改为大写的示例,如上面引用的答案,对我也不起作用,我收到以下错误:
pyspark.sql.utils.ParseException: u"\nextraneous input '>' 期待 {'(', 'SELECT', ...
如何修改ArrayType 中的所有元素?我想避免使用udf。
【问题讨论】:
-
您使用的是什么版本的 Spark?
-
@Bala Spark 2.3.2
-
@pfnuesel
transform仅在 2.4+ 中可用。你最好的选择可能是udf,尽管使用concat_ws、regexp_extract和split有一种很老套的方法
标签: apache-spark pyspark pyspark-sql pyspark-dataframes