Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 火花检查数据帧数组中的任何单词是否包含在另一个列表中?_Scala_Apache Spark - Fatal编程技术网

Scala 火花检查数据帧数组中的任何单词是否包含在另一个列表中?

Scala 火花检查数据帧数组中的任何单词是否包含在另一个列表中?,scala,apache-spark,Scala,Apache Spark,我读过一个json文件,并在spark中转换为dataframe。它有一个包含值列表的列。现在,我想过滤数据帧,使列skills具有另一个列表的任何值 例如: skill= ["A", "B", "C", "D"] and list=["A", "Z"] skill= ["E", "B", "C", "D"] and list=["A", "Z"] 然后,过滤器代码应该显示第一行,而忽略另一行。我正在scala中试用。如果您没有2.4版本,则需要使用udf()。看看这个: val df = S

我读过一个json文件,并在spark中转换为dataframe。它有一个包含值列表的列。现在,我想过滤数据帧,使列skills具有另一个列表的任何值

例如:

skill= ["A", "B", "C", "D"] and list=["A", "Z"]
skill= ["E", "B", "C", "D"] and list=["A", "Z"]

然后,过滤器代码应该显示第一行,而忽略另一行。我正在scala中试用。

如果您没有2.4版本,则需要使用udf()。看看这个:

val df = Seq(Array("A", "B", "C", "D"), Array("E", "B", "C", "D")).toDF("skills")
def skill_check(x:Seq[String]):Boolean = {
  val b = x.map( p=> Seq("A", "Z").exists( y => y==p)).filter(x=>x)
  if ( b.isEmpty ) false else true
}
val udf_skill_check = udf( skill_check(_:Seq[String]))
df.withColumn("check",udf_skill_check('skills) ).filter("check").show(false)
结果:

+------------+-----+
|skills      |check|
+------------+-----+
|[A, B, C, D]|true |
+------------+-----+
如果您不想使用UDF,那么您可以为检查列表引入一个新列,即[“a”,“Z”},explode..然后检查技能是否包含分解的项目,过滤,然后在技能列上删除重复项。迂回,但有效

val df = Seq(Array("A", "B", "C", "D"), Array("E", "B", "C", "D")).toDF("skills")
val df2 = df.withColumn("chk1",lit(Array("A","Z"))) // New column
df2.withColumn("chk2",explode('chk1)).withColumn("chk3", array_contains('skills,'chk2)).filter("chk3").select("skills").dropDuplicates().show(false)

+------------+
|skills      |
+------------+
|[A, B, C, D]|
+------------+

list
是否也是数据框中的一列,还是只有一个列表用于数据框中的所有行?