Фильтрация набора данных в Spark с помощью поиска строк - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь просто выполнить простой строковый фильтр с API набора данных, используя startsWith, но я не могу заставить работать приведенный ниже оператор.Я могу использовать contains, как это.Не уверен, что мне здесь не хватает.

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

Но это просто создает пустой набор данных, но я знаю, что в значении есть строка.

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

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Попробуйте следующее:

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|
+---+----+
0 голосов
/ 26 апреля 2018

Вы можете использовать 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")

Так что вы можете подстрока, содержащая столько символов, сколько вы хотите проверить, начинается с

...