【发布时间】:2018-08-27 00:17:24
【问题描述】:
对于包含字符串和数字数据类型混合的数据框,目标是创建一个新的features 列,它是所有这些类型的minhash。
虽然这可以通过执行dataframe.toRDD 来完成,但当下一步只是将RDD 返回 转换为数据帧时,这样做的成本很高。
那么有没有办法按照以下方式进行udf:
val wholeRowUdf = udf( (row: Row) => computeHash(row))
Row 当然不是spark sql 数据类型 - 所以这不会像所示的那样工作。
更新/澄清我意识到创建在withColumn 中运行的全行UDF 很容易。不太清楚的是可以在spark sql 语句中使用什么:
val featurizedDf = spark.sql("select wholeRowUdf( what goes here? ) as features
from mytable")
【问题讨论】:
-
谁说Row不是spark sql。?你的 udf 函数是正确的
-
@RameshMaharjan 在
spark sql语句中如何调用“整行”?例如select wholeRowUdf( what goes here?? ) from .. -
只需使用 struct 内置函数将所有列合二为一并传递给 udf 函数。就这么简单。
-
@RameshMaharjan 随时回答说明您的观点。你在 cmets 中表达的方式我不知道你是在暗示“这很明显 - 你怎么看不到这个”或“这是一种简单的方法”。
-
我已经在下面回答了:) 请检查
标签: scala apache-spark apache-spark-sql