验证字段值的有效方法 Spark
Posted
技术标签:
【中文标题】验证字段值的有效方法 Spark【英文标题】:Effective Way to Validate Field Values Spark 【发布时间】:2016-08-12 21:30:19 【问题描述】:在将数据保存到 hdfs 之前,我需要验证数据框中的某些列。我想知道在 pyspark 1.5.2 / python 2.7 中是否有一种优雅而有效的方法来做到这一点
例如,假设我有以下数据
+-----+---+
| a| b|
+-----+---+
|"foo"|123|
+-----+---+
我想确保 a
列的每个值不超过 3 个字符,b
列的每个值都是 <= 500
。
我目前的想法是编写一个执行简单 if/else 的 udf,并返回某个值,然后根据这些结果决定是否失败。但是,对于很多数据,我担心它会很慢或至少处理非常繁重。是否已经有一种完善的方法可以在 spark 中执行此操作?或者有什么流行的策略来做到这一点?我自己无法找到有关该主题的太多信息。
如果有更好的方法,我也愿意避免火花,任何好的建议都会非常有帮助。
【问题讨论】:
【参考方案1】:您可以使用多个预定义的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|
+-------+------+----------+
【讨论】:
以上是关于验证字段值的有效方法 Spark的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark DataFrame 中计算大于 0 的值的更快方法?