Scala Spark Notebook:如果每个列单元格都是字符串数组,如何根据列值筛选行?

Scala Spark Notebook:如果每个列单元格都是字符串数组,如何根据列值筛选行?,scala,hadoop,apache-spark,apache-spark-sql,spark-dataframe,Scala,Hadoop,Apache Spark,Apache Spark Sql,Spark Dataframe,我有一个巨大的数据框,其中列类别具有企业的各种属性,即是否是餐厅、洗衣服务、迪斯科舞厅等。我需要的是能够。过滤数据框,以便可以看到包含餐厅的每一行。这里的问题是类别是一个字符串数组,其中一个单元格可能类似于:餐馆、食物、夜生活。有什么想法吗?Scala[2.10.6]Spark[2.0.1]Hadoop[2.7.2] 我尝试过SQL风格的查询,如: val countResult = sqlContext.sql( "SELECT business.neighborhood, busine

我有一个巨大的数据框,其中列类别具有企业的各种属性,即是否是餐厅、洗衣服务、迪斯科舞厅等。我需要的是能够。过滤数据框,以便可以看到包含餐厅的每一行。这里的问题是类别是一个字符串数组,其中一个单元格可能类似于:餐馆、食物、夜生活。有什么想法吗?Scala[2.10.6]Spark[2.0.1]Hadoop[2.7.2]

我尝试过SQL风格的查询,如:

val countResult = sqlContext.sql(
   "SELECT business.neighborhood, business.state, business.stars, business.categories 
    FROM business where business.categories == Restaurants group by business.state"
).collect() 
display(countResult) 

我想我可能需要遍历每个单元格,但我不知道如何做到这一点

有什么想法吗?

对于处理数据帧中的列非常有用。在这种情况下,array_contains应该提供您所需要的:

dfBusiness.filter(array_contains($"categories", "Restaurants"))

这将过滤掉categories列中数组中没有Restaurants元素的所有行。

看起来是个好的开始。我认为你应该在你的问题和你正在使用的Spark版本中添加这一点。尽可能完整和具体总是好的。欢迎
dfBusiness.filter($"categories" == ["Restaurants"]).show() 
dfBusiness.filter(array_contains($"categories", "Restaurants"))