使用Spark SQL中的regex函数从字符串中提取特定数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Spark SQL中的regex函数从字符串中提取特定数字相关的知识,希望对你有一定的参考价值。
我在mysql中有一个表,它有POST_ID和相应的INTEREST:
我使用以下正则表达式查询来选择包含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
| FROM
INTEREST_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
SQL/Regex Challenge/Puzzle:如何从 SQL 代码中删除注释(通过使用 SQL 查询)?