比方说,您有一个包含多列的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来更简洁地实现它。
答案 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次或更多次
。*所有字符零次或多次