2016-08-12 88 views
2

我需要在将数据保存到hdfs之前验证数据框中的某些列。我想知道是否有一个优雅和有效的方式pyspark 1.5.2/Python 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| 
+-------+------+----------+