Фильтр DataFrame на основе слов в массиве в Apache Spark - PullRequest
0 голосов
/ 02 октября 2018

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

val dataSet = spark.read.option("header","true").option("inferschema","true").json(path).na.drop.cache()

val threats_path = spark.read.textFile("src/main/resources/cyber_threats").collect()

val newData = dataSet.select("*").filter(col("_source.raw_text").contains(threats_path)).show()

Он не работает, так как Threat_path является массивом строк и содержит работу для строки.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 02 октября 2018

Вы можете использовать isin udf для столбцов

Это будет иметь видcollect и из-за использования фильтра isin.

Я предлагаю вам использовать фильтр dataSet с threats_path, используя join.Это будет что-то вроде

val dataSet = spark.read.option("header","true").option("inferschema","true").json(path).na.drop

val threats_path = spark.read.textFile("src/main/resources/cyber_threats")

val newData = threats_path.join(dataSet, col("_source.raw_text") === col("<col in threats_path >"), "leftouter").show()

Надеюсь, это поможет

...