我是新手,可以引发一个特定的问题,我试图解决和搜索数小时,但仍然持续。
我有两个数据范围。带有列的大型(a):{" Anames"," Description"," ID"和更多}
另一个(b)只有一个列" bname"。既然了,我知道我应该将其转换为其他类型,但是我不确定什么(列表,序列..)。那将是我的第一个问题。
最后,我想在B中搜索(过滤)BNAME中的每个名称" Bname"。和后词如果找到了一个名称,请将其写入带有结构的另一个数据框架中:
{bname,id}
听起来很复杂。但是实际上它只能在数据框中查找一些单词。
编辑:" Anames"可以包含多个名称(例如[John Senna,Bred Ford])," Bname"不。后来,我还想在"描述"中搜索每个" bname"。
使用" array_contains"函数加入两个dataframes:
import sqlContext.implicits._
val aData = List((Array("John Senna", "Bred Ford"), "Any description", 11), (Array("NoName"), "No description", 12))
val bData = List("Bred Ford")
val aDF = sparkContext.parallelize(aData).toDF("ANames", "description", "id")
val bDF = sparkContext.parallelize(bData).toDF("BName")
val result = bDF.join(aDF, expr("array_contains(ANames, BName)"), "inner").select(col("BName"), col("id"))
result.show(false)
输出:
+---------+---+
|BName |id |
+---------+---+
|Bred Ford|11 |
+---------+---+
类似的方法可以在以后用于搜索。