2016-06-29 5 views
0

クラスコンストラクターにパラメーターとして渡された行から値を取得するのに役立つでしょうか(または)より良い方法を提案してください。私の目的は、すべてのフィールドの価値を検証することです。各フィールドには異なる検証基準があります。pyspark:パラメーターとしてRDDをクラスに渡す

私はHiveContextを使用してハイブテーブルを読み込み、データフレームに保存されています

は、これは私がやっているものです。このデータフレームをRDDに変換しました。 RDDの各行をクラスコンストラクタに渡しています。

class Normalizer(): 
    def __init__(self,val): 
     logging.info("Normalizer start...%s"%val) 

ヴァル(コンソールで)のように見える:

[ロウ(ID = u'12' 、= u'xx COL1 'COL2 u'yy ='、...)]

ノーマライザの各フィールドに解析メソッドを書きました。 これで、それぞれのフィールド値を対応するメソッドに渡してデータを検証する必要がありました。

どのようにフィールドの各値を取得しますか? val.idは機能しません。

また、より良いアプローチがあるかどうかをご提案ください。

ありがとうございます!

答えて

1
  • あなたの行がリスト内にあるように見えます:

    ここの機能を使用しないのはなぜ
    val[0].id 
    
  • ?あなたは彼女が `取る()`や `collect`使用しているため、行がリスト内にある理由はおそらく、あなたの最初の箇条書きに

    def normalize(row): 
        .... validate row.id ... 
        return Row(validated = is_validated, id=row.id) 
    
    myrdd.map(normalize) 
    
+0

をブール値を挿入し、間違った行をフィルタリングすることができます。マップステートメントでアクセスしている場合は、点灯しません。そして2番目の弾丸は取るべきアプローチのように見える – David

+0

ありがとう。私は第2のアプローチを取った。 – Aavik

関連する問題