Scala Spark Notebook:如果每个列单元格都是字符串数组,如何根据列值筛选行?
我有一个巨大的数据框,其中列类别具有企业的各种属性,即是否是餐厅、洗衣服务、迪斯科舞厅等。我需要的是能够。过滤数据框,以便可以看到包含餐厅的每一行。这里的问题是类别是一个字符串数组,其中一个单元格可能类似于:餐馆、食物、夜生活。有什么想法吗?Scala[2.10.6]Spark[2.0.1]Hadoop[2.7.2] 我尝试过SQL风格的查询,如: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
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"))