2017-04-10 21 views
0

私は巨大なデータフレームを持っている "カテゴリ"列は、レストラン、ランドリーサービス、ディスコテックなどのビジネスのさまざまな属性を持っています。私が必要なのは、.filterのようなデータフレーム見えるかもしれません。ここでの問題は、「カテゴリ」は、セルが「レストラン、食品、ナイトライフ」のような文字列の配列であることです。何か案は? (スカラ[2.10.6]スパーク[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() 

私は各セルを繰り返し処理する必要があるかもしれないと思いますが、どうやってそれを行うのか分かりません。

アイデア?

+0

これまでに何を試みましたか? – Vidya

+1

良いスタートに見えます。私はあなたの質問にあなたが使用しているSparkのバージョンを追加するべきだと思います。できるだけ完全で具体的なものであることは常に良いことです。ようこそ! – Vidya

答えて

1

functions libraryは、DataFrameの列の処理に非常に役立ちます。この場合、array_containsはあなたが必要とするものを提供する必要があります

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

これはcategories列の配列で「レストラン」要素を持っていない任意の行を除外します。

関連する問題