我有一个巨大的数据框,其中“类别”列具有企业的各种属性,即是否是餐厅、洗衣服务、迪斯科舞厅等。我需要的是能够 .filter数据框,以便可以看到包含 Restaurant 的每一行。这里的问题是“类别”是一个字符串数组,其中一个单元格可能类似于:“餐馆、食物、夜生活”。有任何想法吗? (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)
和
dfBusiness.filter($"categories" == "Restaurants").show()
和
dfBusiness.filter($"categories" == ["Restaurants"]).show()
我想我可能需要遍历每个单元格,但我不知道该怎么做。
有什么想法吗?
最佳答案
functions library对于处理 DataFrame 中的列非常有帮助。在这种情况下,array_contains 应该提供您需要的内容:
dfBusiness.filter(array_contains($"categories", "Restaurants"))
这会过滤掉 categories 列的数组中没有“Restaurants”元素的所有行。
关于scala - 星火笔记本 : How can I filter rows based on a column value where each column cell is an array of strings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43313859/