如何获取字段包含(),[]%或+的行。使用rlike SparkSQL函数

时间:2019-02-27 18:13:42

标签: regex apache-spark apache-spark-sql

比方说,您有一个包含多列的Spark数据框,并且您想返回这些列包含特定字符的行。具体来说,您想返回其中至少一个字段包含(),[]%或+的行。 如果要使用Spark SQL rlike函数,正确的语法是什么?


gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=serviceAccount:${SOURCE_PROJECT_ID}@appspot.gserviceaccount.com \
--role=roles/cloudbuild.builds.viewer \

即使尝试仅为搜索(。

我知道我可以多次使用简单的like构造,但是我试图通过regex和Spark SQL来更简洁地实现它。

2 个答案:

答案 0 :(得分:1)

您可以使用@FragmentScoped class MainFragment(): DaggerFragment(), ArtistClickCallback { @Inject lateinit var adapter : ArtistAdapter } @Module abstract class MainModule { @FragmentScoped @ContributesAndroidInjector(modules = [MainFragmentModule::class]) internal abstract fun mainFragment(): MainFragment } @Module class MainFragmentModule { @Binds internal abstract fun bindArtistClickCallback(mainFragment: MainFragment) : ArtistClickCallback } class ArtistAdapter @Inject constructor( private val artistClickCallback : ArtistClickCallback ) : PagedListAdapter<LastFmArtist, RecyclerView.ViewHolder>(POST_COMPARATOR) 方法进行尝试:

rlike

输出:

dummyDf.show()

+---------+----------+--------+
|FirstName|MiddleName|LastName|
+---------+----------+--------+
|    John[|        Ha|  Smith?|
|    Julie|        Hu|   Burol|
|    Ka%rl|         G|     Hu!|
| (Harold)|        Ju|     Di+|
|     +Tim|      Dgfg|   Ergf+|
+---------+----------+--------+

val df = dummyDf.withColumn("hasSpecial",lit(false))

val result = df.dtypes
              .collect{ case (dn, dt) => dn }
              .foldLeft(df)((accDF, c) => accDF.withColumn("hasSpecial", col(c).rlike(".*[\\(\\)\\[\\]%+]+.*") || col("hasSpecial")))

result.filter(col("hasSpecial")).show(false)

如果需要,您也可以放下+---------+----------+--------+----------+ |FirstName|MiddleName|LastName|hasSpecial| +---------+----------+--------+----------+ |John[ |Ha |Smith? |true | |Ka%rl |G |Hu! |true | |(Harold) |Ju |Di+ |true | |+Tim |Dgfg |Ergf+ |true | +---------+----------+--------+----------+

答案 1 :(得分:0)

尝试一下.*[()\[\]%\+,.]+.*

。*所有字符零次或多次

[()[]%+ ,.] +方括号内的所有字符1次或更多次

。*所有字符零次或多次