使用Spark SQL中的regex函数从字符串中提取特定数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Spark SQL中的regex函数从字符串中提取特定数字相关的知识,希望对你有一定的参考价值。

我在mysql中有一个表,它有POST_ID和相应的INTEREST:

enter image description here

我使用以下正则表达式查询来选择包含1,2,3的兴趣。

SELECT * FROM INTEREST_POST where INTEREST REGEXP '(?=.*[[:<:]]1[[:>:]])(?=.*[[:<:]]3[[:>:]])(?=.*[[:<:]]2[[:>:]])';

我在HDFS中导入了表。但是,当我在SparkSQL中使用相同的查询时,它会显示空记录。

如何在spark中使用REGEXP函数来选择包含1,2,3的兴趣?

答案

您正在使用的正则表达式需要稍微更改一下。您可以执行以下操作。

scala> val myDf2 = spark.sql("SELECT * FROM INTEREST_POST where INTEREST REGEXP '^[1-3](,[1-3])*$'")
myDf2: org.apache.spark.sql.DataFrame = [INTEREST_POST_ID: int, USER_POST_ID: int ... 1 more field]

scala> myDf2.show
+----------------+------------+--------+
|INTEREST_POST_ID|USER_POST_ID|INTEREST|
+----------------+------------+--------+
|               1|           1|   1,2,3|
另一答案

我得到了解决方案。你可以这样做:

var result = hiveContext.sql("""SELECT USER_POST_ID | FROMINTEREST_POST_TABLE | WHERE INTEREST REGEXP '(?=.*0[1])(?=.*0[2])(?=.*0[3])' """) result.show

Fetching Records from INTEREST_POST_TABLE

以上是关于使用Spark SQL中的regex函数从字符串中提取特定数字的主要内容,如果未能解决你的问题,请参考以下文章

Spark-SQL 是不是支持使用 regex 规范的 Hive Select All Query with except Columns

如何从日期字符串中提取年份?

尝试从 UDF 执行 spark sql 查询

SQL/Regex Challenge/Puzzle:如何从 SQL 代码中删除注释(通过使用 SQL 查询)?

Spark SQL:如何使用 JAVA 从 DataFrame 操作中调用 UDF

Spark-sql 中的 NullPointerException