![](/img/trans.png)
[英]Scala Spark - java.lang.UnsupportedOperationException: empty.init
[英]Spark SQL - java.lang.UnsupportedOperationException: empty.init when casting column
嘗試對列執行強制轉換時出現以下錯誤(從帶有標題的逗號分隔的 csv 文件中讀取)。
這是我正在使用的代碼:
var df = spark.read.option("header","true").option("delimiter",",").csv("/user/sample/data")
df.withColumn("columnCast", expr("CAST(SaleAmount) AS LONG")).count
這會導致每次拋出以下異常。 我在投射時嘗試了不同的列,有些則拋出,而另一些則沒有。 我也試過以下也拋出相同的異常。
df.withColumn("columnCast", expr("CAST(NULL) AS LONG")).count
java.lang.UnsupportedOperationException: 在 scala.collection.TraversableLike$class.init(TraversableLike.scala:451) 在 scala.collection.mutable.ArrayOps$ofInt.scala$collection$IndexedSeqOptimized$$super$init(ArrayOps. scala:234) at scala.collection.IndexedSeqOptimized$class.init(IndexedSeqOptimized.scala:135) at scala.collection.mutable.ArrayOps$ofInt.init(ArrayOps.scala:234) at org.apache.spark.sql.catalyst .analysis.FunctionRegistry$$anonfun$7$$anonfun$11.apply(FunctionRegistry.scala:565) 在 org.apache.spark.sql.catalyst.analysis.FunctionRegistry$$anonfun$7$$anonfun$11.apply(FunctionRegistry.scala:565) [558] 第558話
我試過在 spark-shell 和 zeppelin 中運行它。 Spark 版本是 Cloudera 管理的 2.4.0.cloudera2。
是什么導致了這種行為? 這是故意的嗎? 我該如何處理?
您可以使用 column 的 cast 方法進行轉換:
import spark.implicits._
val df = spark.sparkContext.parallelize(1 to 10).toDF("col1")
val casted = df.withColumn("test", lit(null).cast("string"))
.withColumn("testCast", $"test".cast("long"))
casted.show()
casted.printSchema()
結果:
+----+----+--------+
|col1|test|testCast|
+----+----+--------+
| 1|null| null|
| 2|null| null|
| 3|null| null|
| 4|null| null|
| 5|null| null|
| 6|null| null|
| 7|null| null|
| 8|null| null|
| 9|null| null|
| 10|null| null|
+----+----+--------+
root
|-- col1: integer (nullable = false)
|-- test: string (nullable = true)
|-- testCast: long (nullable = true)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.