Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex spark数据帧列上的正则表达式_Regex_Scala_Apache Spark_Spark Dataframe - Fatal编程技术网

Regex spark数据帧列上的正则表达式

Regex spark数据帧列上的正则表达式,regex,scala,apache-spark,spark-dataframe,Regex,Scala,Apache Spark,Spark Dataframe,如果有一个dataframe,其中一列中有一个查询作为值,我将尝试使用regex提取第一个组中一个/两个括号之间的值 我对正则表达式的输入是: select nvl(sum(field1),0), field2, field3 from tableName1 where partition_date='2018-03-13' 输出应为: field1 Spark代码我用来提取值的是: target_query = "select nvl(sum(field1),0), field2, fie

如果有一个dataframe,其中一列中有一个查询作为值,我将尝试使用regex提取第一个组中一个/两个括号之间的值

我对正则表达式的输入是:

select nvl(sum(field1),0), field2, field3 from tableName1 where partition_date='2018-03-13'
输出应为:

field1
Spark代码我用来提取值的是:

target_query = "select nvl(sum(field1),0), field2, field3 from tableName1 where partition_date='2018-03-13'"

val df1 = df.withColumn("Extract_field", regexp_extract(df("target_query"),"(?<=\\().*?(?=\\))",0))

请告诉我如何仅提取
字段1
。我可能会得到
sum(field1)
而不是
nvl(sum(field1),0)
。是否可以使用同一个正则表达式来处理这两种情况?

因为
字段1
值总是包含一个
总和
您可以使用以下正则表达式:

sum\\((.*?)\\)
这将匹配
sum()
中包含的所有内容

要获得正确的匹配,需要将所需字段(
field1
)作为查询中的第一个和(因为需要在
regexp\u extract
中指定匹配的groupid)。事实上,只要它处于相同的位置(第一、第二等),你就可以正确地匹配它。例如:

val df1 = df.withColumn("Extract_field", regexp_extract(df("target_query"), "sum\\((.*?)\\)", 1))

末尾的1表示提取第一个捕获组中的所有内容。

查询中是否始终只有一个和?是的,查询将只有一个和。
val df1 = df.withColumn("Extract_field", regexp_extract(df("target_query"), "sum\\((.*?)\\)", 1))