首页 > 解决方案 > Apache Spark 在 SQL 表达式中开始

问题描述

在 Apache Spark API 中,我可以使用startsWith函数来测试列的值:

myDataFrame.filter(col("columnName").startsWith("PREFIX"))

是否可以在 Spark SQL 表达式中执行相同的操作,如果可以,您能否举个例子?

标签: scalaapache-sparkapache-spark-sql

解决方案


使用 regexp_replace,您可以在没有 UDF 的情况下获得相同的结果。看一下这个

scala> val df=Seq(("bPREFIX",1),("PREFIXb",2)).toDF("a","b")
df: org.apache.spark.sql.DataFrame = [a: string, b: int]

scala> df.show
+-------+---+
|      a|  b|
+-------+---+
|bPREFIX|  1|
|PREFIXb|  2|
+-------+---+


scala> df.filter(regexp_replace('a,"""^PREFIX.*""","")==="").show
+-------+---+
|      a|  b|
+-------+---+
|PREFIXb|  2|
+-------+---+


scala>

或使用 regexp_extract()

scala> df.filter(regexp_extract('a,"""(^PREFIX)""",1)==="PREFIX").show
+-------+---+
|      a|  b|
+-------+---+
|PREFIXb|  2|
+-------+---+


scala>

使用 instr() 函数

scala> df.filter("instr(a,'PREFIX')=1").show
+-------+---+
|      a|  b|
+-------+---+
|PREFIXb|  2|
+-------+---+


scala>

推荐阅读