使用字符串搜索过滤Spark中的数据集

时间:2018-04-25 22:37:20

标签: apache-spark apache-spark-dataset

我尝试使用startsWith使用数据集api进行简单的字符串过滤,但我无法使下面的语句起作用。我可以像这样使用contains。不知道我在这里失踪了什么。

  ds.filter(_.colToFilter.toString.contains("0")).show(false)

但这只会产生一个空的数据集,但我知道字符串在值中。

  ds.filter(_.colToFilter.toString.startsWith("0")).show(false)

2 个答案:

答案 0 :(得分:1)

您可以使用subString 内置功能作为

的Scala

import org.apache.spark.sql.functions._
df.filter(substring(col("column_name-to-be_used"), 0, 1) === "0")

Pyspark

from pyspark.sql import functions as f
df.filter(f.substring(f.col("column_name-to-be_used"), 0, 1) == "0")

所以你可以子串到你要在入口处检查的字符数

答案 1 :(得分:1)

尝试以下方法:

val d = ds.filter($"columnToFilter".contains("0"))

val d = ds.filter($"columnToFilter".startsWith("0"))

示例

+----+-------+
| age|   name|
+----+-------+
|null|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

假设我们有上述dataset,输出将为:

> var d = ds.filter($"name".contains("n"))

+---+------+
|age|  name|
+---+------+
| 30|  Andy|
| 19|Justin|
+---+------+

> var d = ds.filter($"name".startsWith("A"))

+---+----+
|age|name|
+---+----+
| 30|Andy|
+---+----+