【发布时间】:2019-02-10 01:09:58
【问题描述】:
我有一个 Dataframe,其中有一列需要清理。 我期待一个正则表达式模式,它可以应用于 Java/Scala 中的 Spark UDF,它将从字符串中提取有效内容。
userId 列的示例输入行如下 DataFrame 所示:
[[105286112,2017-11-19_14-16 >> ABCDE >> GrocersRetail >> XXX], [115090439,2017-11-19_14-16 >> ABCDE >> GrocersRetail >> XXX], [29818926,2017-11-19_14-16 >> ABCDE >> GrocersRetail >> XXX]]
名为“userId”的列的预期转换:
一个字符串,看起来像:
105286112|115090439|29818926
我需要修改userId 列的逻辑/方法,以便制作相同的UDF。可以用正则表达式或其他方法实现吗?
输入的 DataFrame 如下所示:
+--------------------+--------------------+
| dt_geo_cat_brand| userId |
+--------------------+--------------------+
|2017-10-30_17-18 ...|[[133207500,2017-...|
|2017-10-19_21-22 ...|[[194112773,2017-...|
|2017-10-29_17-18 ...|[[274188233,2017-...|
|2017-10-29_14-16 ...|[[86281353,2017-1...|
|2017-10-01_09-10 ...|[[92478766,2017-1...|
|2017-10-09_17-18 ...|[[156663365,2017-...|
|2017-10-06_17-18 ...|[[111869972,2017-...|
|2017-10-13_09-10 ...|[[64404465,2017-1...|
|2017-10-13_07-08 ...|[[146355663,2017-...|
|2017-10-22_21-22 ...|[[54096488,2017-1...|
+--------------------+--------------------+
架构:
root
|-- dt_geo_cat_brand: string (nullable = true)
|-- userId: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- _1: string (nullable = true)
| | |-- _2: string (nullable = true)
期望的输出:
+--------------------+--------------------+
| dt_geo_cat_brand| userId |
+--------------------+--------------------+
|2017-10-30_17-18 ...|133207500,1993333444|
|2017-10-19_21-22 ...|122122212,3432323333|
|2017-10-29_17-18 ...|274188233,8869696966|
|2017-10-29_14-16 ...|862813534,444344444,43444343434|
|2017-10-01_09-10 ...|92478766,880342342,4243244432,5554335535|
+--------------------+--------------------+
等等……
【问题讨论】:
-
但是您为什么要尝试使用正则表达式从数据框中提取数据?
-
我需要使用从该列中提取的值(数值),以便稍后在处理模型中生成位图。您看到这样的数据的原因是我习惯于 Cassandra 按键对数据进行分组,并根据键将值组合在一起。
标签: java regex scala apache-spark dataframe