spark过滤Dataframe中的列,其中包含集合中的单词

ljo96ir5  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(506)

我已经找了一段时间了,但还没有找到怎么做的方法。我有一个dataframe,它包含一个表的引用,其中一列包含一个字符串

  1. dataframe schema: name string,lastname string, interests string

我有这样一份兴趣清单:

  1. val sports:List [String] = List("football","basketball","soccer")

我想从我的数据框中过滤所有的人,这些人包含了他们感兴趣的上述运动之一

  1. val peopledata = sqlContext.sql("select * from learning.people")

我试过这样做:

  1. for (sport <- sports)peopledata.filter(peopledata("interests").contains(sport))

但是我问了我工作的公司的一位专业人士,他告诉我他有一个更好更漂亮的方法

kxe2p93d

kxe2p93d1#

使用字符串插值可以解决您的问题:

  1. val interest = sports.mkString("('","','","')")
  2. val peopledata = sqlContext.sql(s"select * from learning.people where interest in $interest")
7cjasjjr

7cjasjjr2#

执行 collect() 要获取的函数 Array[Row] 此数组的结果和筛选器元素的 sports.contains() : peopledata.collect().filter(row => sports contains row.getString(2)) 这是你的电话号码 interests 架构中的字段。

相关问题