我使用spark-shell,并希望使用select和udf从另一个数据帧(df1)创建一个数据帧(df2)。但是当我想显示df2 ==> df2.show(1)
时出现错误 var df1 = sql(s"select * from table_1")
val slice = udf ((items: Array[String]) => if (items == null) items
else {
if (items.size <= 20)
items
else
items.slice(0, 20)
})
var df2 = df1.select($"col1", slice($"col2"))
和df1模式是:
scala> df1.printSchema
root
|-- col1: string (nullable = true)
|-- col2: array (nullable = true)
| |-- element: string (containsNull = true)
scala> df2.printSchema
root
|-- col1: string (nullable = true)
|-- UDF(col2): array (nullable = true)
| |-- element: string (containsNull = true)
错误:
Failed to execute user defined function($anonfun$1: (array<string>) => array<string>)
答案 0 :(得分:1)
使用udf中的Seq [String]而不是Array [String],问题已解决。