【发布时间】:2021-11-30 08:58:46
【问题描述】:
数据:
+---+-------------------------------------------------------------+
|id |filters |
+---+-------------------------------------------------------------+
|1 |{"option.p.one":["A","B","C","D"], "option.p.type_two":["1"]}|
+---+-------------------------------------------------------------+
生成数据的代码:
columns = ["id","filters"]
data = [(1, '{"option.p.one":["A","B","C","D"], "option.p.type_two":["1"]}')]
rdd = sc.parallelize(data)
我编写了两个正则表达式来提取和存储此字符串的键和值。
- 密钥:
\.([a-z_]+)\":' - 值:
:\[([^:]+)\
现在,当我运行以下代码时,我看到我的值正则表达式没有返回预期的结果。
dfFromRDD2.withColumn("filter_category", expr(f"regexp_extract_all(filters, '\.([a-z_]+)\":', 1)"))\
.withColumn("filter_inputs", expr(f"regexp_extract_all(filters, ':\[([^:]+)\]', 0)")).show(truncate = False)
+---+-------------------------------------------------------------+---------------+-------------+
|id |filters |filter_category|filter_inputs|
+---+-------------------------------------------------------------+---------------+-------------+
|1 |{"option.p.one":["A","B","C","D"], "option.p.type_two":["1"]}|[one, type_two]|[:[, :[] |
+---+-------------------------------------------------------------+---------------+-------------+
两个正则表达式在 Presto SQL 中都能正常工作
【问题讨论】: