2016-06-24 4 views
0

フィールドの1つにネストされた配列値を持つPySparkにDataFrameがあります。配列に特定の文字列が含まれているDataFrameをフィルター処理したいと思います。私はそれをどうやってできるのか見ていない。PySpark DataFrames:いくつかの値が配列列にある場合のフィルタ

スキーマは次のようになります。私はupper(name) == 'JOHN'すべての行を返すようにしたい root |-- name: string (nullable = true) |-- lastName: array (nullable = true) | |-- element: string (containsNull = false)

lastName列(配列)が'SMITH'が含まれており、私が行ったように平等に(大文字と小文字を区別があるはずです名前)。私は列の値にisin()関数を見つけましたが、それは私が望むものの後方に働くようです。列の値に関数が必要なようです。誰もがこれを行うための簡単な方法のための任意のアイデアを持っていますか?

答えて

2

基礎となるRDDで直接作業することを検討できます。

def my_filter(row): 
    if row.name.upper() == 'JOHN': 
     for it in row.lastName: 
      if it.upper() == 'SMITH': 
       yield row 

dataframe = dataframe.rdd.flatMap(my_filter).toDF() 
関連する問題