spark笔记本:如何根据列值筛选行,其中每个列单元格都是字符串数组?

voj3qocg  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(311)

我有一个巨大的数据框,其中一列“类别”有一个企业的各种属性,即是否是一个餐厅,洗衣服务,迪斯科舞厅等,我需要的是能够 .filter Dataframe,以便可以看到包含餐厅的每一行。这里的问题是“categories”是一组字符串,其中一个单元格可能类似于:“餐馆、食物、夜生活”。有什么想法吗(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()

我想我可能需要迭代每个单元格,但我不知道怎么做。
有什么想法吗?

gev0vcfq

gev0vcfq1#

函数库对于处理 DataFrame . 在这种情况下, array_contains 应提供您需要的:

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

这将过滤出在中的数组中没有“restaurants”元素的所有行 categories 列。

相关问题