在将数据保存到hdfs之前,我需要验证数据框中的某些列。我想知道在pyspark 1.5.2 / python 2.7
中是否有一种优雅而有效的方法例如,假设我有以下数据
+-----+---+
| a| b|
+-----+---+
|"foo"|123|
+-----+---+
我想确保列a
的每个值不超过3个字符,列b
为<= 500
。
我目前的想法是编写一个简单的if / else的udf,然后返回一个值,然后根据这些结果决定是否失败。然而,对于大量数据,我担心它会很慢或者至少是非常繁重的处理。在火花中有没有完善的方法呢?或者有这样的流行策略吗?我自己还没有找到关于这个主题的更多信息。
如果有更好的方法,我也愿意避免火花,任何好的建议都会非常有帮助。
答案 0 :(得分: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|
+-------+------+----------+