【问题标题】:Changing Spark dataframe column types leads to error更改 Spark 数据框列类型会导致错误
【发布时间】:2016-06-01 16:44:41
【问题描述】:

我在 Jupyter 笔记本中运行 Spark(使用 jupyter-scala 内核)。我有一个包含 String 类型列的数据框,我想要一个将这些值作为 Int 类型的新数据框。我已经尝试了这篇文章的所有答案:

How to change column types in Spark SQL's DataFrame?

但我不断收到错误消息:

org.apache.spark.SparkException: Job aborted due to stage failure

特别是,我收到以下错误消息:

org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 43, Column 44: Decimal

所以我去看了第 43 行:

/* 043 */ Decimal tmpDecimal6 = Decimal.apply(new java.math.BigDecimal(primitive5.toString()));

到目前为止,我尝试过的任何方法都没有奏效。

这是一个简单的例子:

val dF = sqlContext.load("com.databricks.spark.csv", Map("path" -> "../P80001571-ALL.csv", "header" -> "true"))
val dF2 = castColumnTo( dF, "contbr_zip", IntegerType )
dF2.show


val dF = sqlContext.load("com.databricks.spark.csv", Map("path" -> 

其中 castColumnTo 是按照 Martin Senne 在上述帖子中的建议定义的:

object DFHelper
  def castColumnTo( df: DataFrame, cn: String, tpe: DataType ) : DataFrame = {
    df.withColumn( cn, df(cn).cast(tpe) )
  }
}

这是错误:

org.apache.spark.SparkException:作业因阶段失败而中止:阶段 3.0 中的任务 0 失败 1 次,最近一次失败:阶段 3.0 中丢失任务 0.0(TID 3,本地主机):java.util.concurrent.ExecutionException:java .lang.Exception:编译失败:org.codehaus.commons.compiler.CompileException:文件'generated.java',第97行,第45列:十进制

第 97 行如下所示:

Decimal tmpDecimal18 = Decimal.apply(new java.math.BigDecimal(primitive17.toString()));

【问题讨论】:

标签: scala apache-spark casting spark-dataframe jupyter-notebook


【解决方案1】:

我似乎已经解决了这个问题;这与我设置 Spark 在笔记本中运行的方式有关。

这是我之前的:

@transient val Spark = new ammonite.spark.Spark

import Spark.{ sparkConf, sc, sqlContext }
sc
import sqlContext.implicits._
import sqlContext._

这就是我现在拥有的:

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
val conf = new SparkConf().setAppName("appname").setMaster("local")
val sc = new SparkContext(conf)
import org.apache.spark.sql.SQLContext
val sqlContext = new SQLContext(sc)

sqlContext
import sqlContext._
import sqlContext.implicits._

现在看来一切正常。

【讨论】:

    猜你喜欢
    • 2017-01-05
    • 2017-02-17
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    相关资源
    最近更新 更多