2016-08-12 6 views
2

データをhdfsに保存する前に、データフレーム内の特定の列を検証する必要があります。私は、pyspark 1.5.2 /パイソン例えば2.7フィールド値を検証する有効な方法Spark

でこれを行うには、エレガントかつ効果的な方法があるかどうかを知りたい、私はすべてのことを確認する

+-----+---+ 
| a| b| 
+-----+---+ 
|"foo"|123| 
+-----+---+ 

私は次のようなデータを持っていると言います列aの値は3文字以下で、列b<= 500です。

私の現在の考えは、単純なif/elseを実行し、特定の値を返し、その結果に基づいてジョブを失敗するかどうかを決定するudfを書くことです。しかし、多くのデータについては、処理が遅くなるか、少なくとも非常に処理が重くなることが懸念されます。既にスパークでこれを行うための確立された方法はありますか?または、それを行うための一般的な戦略の任意の並べ替えはありますか?私は自分自身で多くの情報を見つけることができませんでした。

私はまた、より良い方法があれば、スパークを避けるために開いています、良い提案は非常に役に立つでしょう。

答えて

3

事前定義済みのfunctionsを使用して目的を達成できます。

from pyspark.sql.functions import * 

df = sc.parallelize([("fo", 100),("alb", 501),("roger", -10),("francis", 1000)]).toDF(["name", "salary"]) 

df.select("*", ((length("name") < lit(3)) & (col("salary") <= lit(500))).alias("evaluation")).show() 

+-------+------+----------+ 
| name|salary|evaluation| 
+-------+------+----------+ 
|  fo| 100|  true| 
| alb| 501|  false| 
| roger| -10|  false| 
|francis| 1000|  false| 
+-------+------+----------+ 
関連する問題