如何在Spark数据帧中执行链功能?

用户名

如何在Spark数据帧中执行链函数?在我的代码中,我想先做大写,然后再进行布尔转换。但我的代码无法正常工作。谢谢

import org.apache.spark.sql.functions.udf
val trimStr: String => String = _.trim
val trimUDF = udf(trimStr)

import org.apache.spark.sql.functions.udf
val upperCaseStr: String => String = _.toUpperCase
val upperCaseUDF = udf(upperCaseStr)

import org.apache.spark.sql.functions.udf
     def booleanValueSubstitution = udf[String, String] {
       case "" => "N"
       case null => "N"           
       case "TRUE" => "Y"        
     }
var df= df1.withColumn("xx", booleanValueSubstitution(upperCaseUDF(df1("yy"))) )
零323

首先,不要重新发明轮子。对于许多常见任务,您会发现内置函数:

import org.apache.spark.sql.functions.{trim, upper}

除其他好处外,这是null安全的:

val df = Seq(None, Some(""), Some("true"), Some(" TRUE "), Some("foo")).toDF("x")

df.select(upper(trim($"x")))
+--------------+
|upper(trim(x))|
+--------------+
|          null|
|              |
|          TRUE|
|          TRUE|
|           foo|
+--------------+

您定义的函数(除外)booleanValueSubstitution不是。每次遇到代码时NULL,都会由于NPE而失败,因此,如果您决定重新发明轮子,则应该始终予以解决。

您可以像使用一样进行模式匹配,也booleanValueSubstitution可以使用Try

import scala.util.Try

val upperCaseUDF = udf((s: String) => Try(s.toUpperCase).toOption)
val trimUDF = udf((s: String) => Try(s.trim).toOption)

如果决定使用模式匹配,请确保条件详尽无遗:

val booleanValueSubstitution = udf[String, String] {
  case "" => "N"
  case null => "N"           
  case "TRUE" => "Y"   
  case _ => "N"
}

或更简单:

val booleanValueSubstitution = udf[String, String] {      
  case "TRUE" => "Y"
  case _ => "N"
}

否则你会得到的scala.MatchError

接下来,存在一些惯用的SQL解决方案,您可以使用它们代替进行模式匹配udf例如,您可以使用CASE WHEN

import org.apache.spark.sql.functions.{when, coalesce, lit}

df.select(
  when($"x".isNull, "N").when($"x" === "", "N").when($"x" === "TRUE", "Y")
)

或者:

df.select(coalesce(when($"x" === "TRUE", "Y").otherwise("N"), lit("N")))

最后,如果您认为布尔值,最好使用布尔值:

when($"x".isNull, false).when($"x" === "", false).otherwise(true)

一般来说:

  • 出于多种原因,内置功能通常比UDF更可取。
  • 不允许在每个位置上都使用UDF,因此不一定总是可以链接。在某些情况下,您必须分别添加udf结果:

    df.withColumn("foo", someUDF("x")).withColumn("bar", someFunc("foo"))
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spark:如何对数据帧执行循环功能

来自分类Dev

如何在Spark中释放数据帧?

来自分类Dev

如何在R中的数据帧上应用功能

来自分类Dev

如何在Spark数据帧中展平结构?

来自分类Dev

如何在Spark数据帧中合并数组列

来自分类Dev

如何在magrittr链中向数据帧添加行名

来自分类Dev

如何在R数据帧中剪切乳胶首字母缩写链

来自分类Dev

如何在 R(交叉引用数据帧)中执行基于标记的数据帧校正?

来自分类Dev

如何在使用pyspark从其自己的数据帧中选择的火花数据帧中执行计算

来自分类Dev

无法在Spark(Scala)的数据帧上执行用户定义的功能

来自分类Dev

给定多个条件时如何在Spark数据帧上执行“查找”操作

来自分类Dev

如何在 Spark Row 上执行 ETL 并将其返回到数据帧?

来自分类Dev

如何在 Spark 中转置数据帧?

来自分类Dev

如何在不使用Spark SQL的情况下在Spark中对数据帧进行排序?

来自分类Dev

如何在数据帧列表中执行mutate_all以删除不良数据

来自分类Dev

如何使用Apache Spark数据帧(Python)执行Switch语句

来自分类Dev

如何在spark中的复杂结构数据帧中绑定变量

来自分类Dev

如何在Python中将Spark数据帧中的所有列值合并为String?

来自分类Dev

如何在spark scala中通过数据帧动态调用withColumn函数

来自分类Dev

如何在 Spark 中的 AWS Glue 创建的数据帧上运行 SQL SELECT?

来自分类Dev

如何在R中拉伸数据帧?

来自分类Dev

如何在数据框中的特定数据组上执行mutate功能(ddply)?

来自分类Dev

如何在pygame中停止执行功能

来自分类Dev

如何从分组数据中获取Spark数据帧

来自分类Dev

如何在Spark中执行辅助排序?

来自分类Dev

PySpark:如果在数据帧中的链中,如何处理“其他”?

来自分类Dev

如何在Spark 1.5中转置数据帧(没有可用的数据透视运算符)?

来自分类Dev

如何在ExtJS中的数据视图中的链接单击上执行功能

来自分类Dev

在Django中,如何在执行测试功能后保留数据库状态?

Related 相关文章

  1. 1

    Spark:如何对数据帧执行循环功能

  2. 2

    如何在Spark中释放数据帧?

  3. 3

    如何在R中的数据帧上应用功能

  4. 4

    如何在Spark数据帧中展平结构?

  5. 5

    如何在Spark数据帧中合并数组列

  6. 6

    如何在magrittr链中向数据帧添加行名

  7. 7

    如何在R数据帧中剪切乳胶首字母缩写链

  8. 8

    如何在 R(交叉引用数据帧)中执行基于标记的数据帧校正?

  9. 9

    如何在使用pyspark从其自己的数据帧中选择的火花数据帧中执行计算

  10. 10

    无法在Spark(Scala)的数据帧上执行用户定义的功能

  11. 11

    给定多个条件时如何在Spark数据帧上执行“查找”操作

  12. 12

    如何在 Spark Row 上执行 ETL 并将其返回到数据帧?

  13. 13

    如何在 Spark 中转置数据帧?

  14. 14

    如何在不使用Spark SQL的情况下在Spark中对数据帧进行排序?

  15. 15

    如何在数据帧列表中执行mutate_all以删除不良数据

  16. 16

    如何使用Apache Spark数据帧(Python)执行Switch语句

  17. 17

    如何在spark中的复杂结构数据帧中绑定变量

  18. 18

    如何在Python中将Spark数据帧中的所有列值合并为String?

  19. 19

    如何在spark scala中通过数据帧动态调用withColumn函数

  20. 20

    如何在 Spark 中的 AWS Glue 创建的数据帧上运行 SQL SELECT?

  21. 21

    如何在R中拉伸数据帧?

  22. 22

    如何在数据框中的特定数据组上执行mutate功能(ddply)?

  23. 23

    如何在pygame中停止执行功能

  24. 24

    如何从分组数据中获取Spark数据帧

  25. 25

    如何在Spark中执行辅助排序?

  26. 26

    PySpark:如果在数据帧中的链中,如何处理“其他”?

  27. 27

    如何在Spark 1.5中转置数据帧(没有可用的数据透视运算符)?

  28. 28

    如何在ExtJS中的数据视图中的链接单击上执行功能

  29. 29

    在Django中,如何在执行测试功能后保留数据库状态?

热门标签

归档