验证字段值Spark的有效方法

时间:2016-08-12 21:30:20

标签: python hadoop apache-spark pyspark bigdata

在将数据保存到hdfs之前,我需要验证数据框中的某些列。我想知道在pyspark 1.5.2 / python 2.7

中是否有一种优雅而有效的方法

例如,假设我有以下数据

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

我想确保列a的每个值不超过3个字符,列b<= 500

我目前的想法是编写一个简单的if / else的udf,然后返回一个值,然后根据这些结果决定是否失败。然而,对于大量数据,我担心它会很慢或者至少是非常繁重的处理。在火花中有没有完善的方法呢?或者有这样的流行策略吗?我自己还没有找到关于这个主题的更多信息。

如果有更好的方法,我也愿意避免火花,任何好的建议都会非常有帮助。

1 个答案:

答案 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|
+-------+------+----------+