验证字段值的有效方法 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 的值的更快方法?

基于 Symfony2 中其他字段值的字段条件验证

spark有效地找到一组列的最频繁值

如何在 Spark 中有效地选择包含某个值的数据框列?

在 python 或 spark 中获取大数据缺失值的最快方法是啥?

严格验证可空字段[重复]