在spark sql中使用regex函数从字符串中提取特定的数字

relj7zay  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(1508)

我在mysql中有一个表,它有post\u id和相应的兴趣:

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

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

我用hdfs导入了这个表。但是,当我在sparksql中使用相同的查询时,它会显示空记录。
如何在spark中使用regexp函数来选择包含1,2,3的兴趣?

7uzetpgm

7uzetpgm1#

我找到解决办法了。你可以这样做: var result = hiveContext.sql("""SELECT USER_POST_ID | FROM 利息表 | WHERE INTEREST REGEXP '(?=.*0[1])(?=.*0[2])(?=.*0[3])' """) result.show 从interest\u post\u表获取记录

6bc51xsx

6bc51xsx2#

您正在使用的正则表达式需要稍微更改一下。你可以这样做。

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|

相关问题