SPARK 数据框错误:在使用 UDF 拆分列中的字符串时无法转换为 scala.Function2
Posted
技术标签:
【中文标题】SPARK 数据框错误:在使用 UDF 拆分列中的字符串时无法转换为 scala.Function2【英文标题】:SPARK dataframe error: cannot be cast to scala.Function2 while using a UDF to split strings in column 【发布时间】:2016-09-21 21:35:09 【问题描述】:当我使用 udf 按分隔符拆分列中的字符串时,我不断收到错误消息。我正在使用 Scala
Error: java.lang.ClassCastException: $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$1 cannot be cast to scala.Function2
不知道这是什么以及如何解决它。
这是我的 udf 和数据框:
val rsplit = udf((refsplit: String) => refsplit.split(":"))
+---------+--------------------+--------------------+
| user| jsites| jsites1|
+---------+--------------------+--------------------+
|123ashish|m.mangahere.co:m....|m.mangahere.co:m....|
|456ashish|m.mangahere2.co:m...|m.mangahere2.co:m...|
| ashish|m.mangahere.co:m....|m.mangahere.co:m....|
+---------+--------------------+--------------------+
jsites 列看起来像m.manghere.co:m.facebook.com:.msn.com
。我正在尝试使用 udf 将m.manghere.co:m.facebook.com:.msn.com
拆分为:
。
我不断收到这个错误
【问题讨论】:
哪个代码实际上给出了这个错误?创建 UDF 或使用 UDF 时?如果是后者,你如何使用UDF? 在使用 udf 时。ff.withColumn("split sites",rsplit(ff.col("jsites1")))
你能提供一个最小的、完整的、可验证的例子吗?这两行加上一些猜测你之前和之后的内容并没有给我带来任何问题,通过一个完整的例子,我们也许可以实际重现它并找到原因。见***.com/help/mcve。它还可以帮助提供使用的 spark 版本,并检查您使用的版本与集群上的版本相同。 Scala 也是如此,您没有将 2.11 与 Spark 一起用于 2.10。
您是否尝试过使用内置 UDF 来拆分字符串?见spark.apache.org/docs/1.6.1/api/java/org/apache/spark/sql/…。
要尝试的另一件事是使用采用单个字符的split
重载(即refsplit.split(':')
)。这可能是 UDF 的返回类型是 Java 数组而不是 Scala 数组的问题。
【参考方案1】:
org.apache.spark.sql.functions
中提供了拆分功能
import org.apache.spark.sql.functions.col,split
val df = ???
df.withColumn("split sites",split(col("COLNAME"), "REGEX"))
问题有点老了,希望这对其他人有帮助。干杯
【讨论】:
【参考方案2】:此类错误表示您在使用udf
时,参数列表不匹配。例如您尝试将 2 个参数传递给 udf,而 udf 只接受 1
【讨论】:
以上是关于SPARK 数据框错误:在使用 UDF 拆分列中的字符串时无法转换为 scala.Function2的主要内容,如果未能解决你的问题,请参考以下文章
spark read 在 Scala UDF 函数中不起作用