【问题标题】:udf Function for DataType casting, Scala用于数据类型转换的 udf 函数,Scala
【发布时间】:2017-02-19 00:07:36
【问题描述】:

我有下一个数据框:

df.show()

+---------------+----+
|              x| num|
+---------------+----+
|[0.1, 0.2, 0.3]|   0|
|[0.3, 0.1, 0.1]|   1|
|[0.2, 0.1, 0.2]|   2|
+---------------+----+

此 DataFrame 具有以下列的数据类型:

df.printSchema 
root
 |-- x: array (nullable = true)
 |    |-- element: double (containsNull = true)
 |-- num: long (nullable = true)

我目前尝试将 DataFrame 内的 DoubleArray 转换为 FloatArray。我用 udf 的下一条语句来做:

val toFloat = udf[(val line: Seq[Double]) => line.map(_.toFloat)]
val test = df.withColumn("testX", toFloat(df("x")))

此代码当前无效。谁能和我分享一下如何更改DataFrame内部的数组类型的解决方案?

我想要的是:

df.printSchema 
root
 |-- x: array (nullable = true)
 |    |-- element: float (containsNull = true)
 |-- num: long (nullable = true)

这个问题是基于问题How tho change the simple DataType in Spark SQL's DataFrame

【问题讨论】:

    标签: scala apache-spark dataframe types


    【解决方案1】:

    您的udf 声明错误。你应该这样写:

    val toFloat = udf((line: Seq[Double]) => line.map(_.toFloat))
    

    【讨论】:

    • @cheseaus,非常感谢。我不知道 val 是多余的,括号是错误的。我现在才学习 udf 语法和用法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多