描述数据框时的类强制转换异常

时间:2015-07-07 21:30:54

标签: scala apache-spark

我有一个csv格式的小数据集,其中有两列整数,我在其上计算汇总统计信息。应该没有遗漏或错误的数据:

import org.apache.spark.sql.types._
import org.apache.spark.sql._

val raw = sc.textFile("skill_aggregate.csv")

val struct = StructType(StructField("personid", IntegerType, false) 
  :: StructField("numSkills", IntegerType, false) :: Nil)

val rows = raw.map(_.split(",")).map(x => Row(x(0), x(1)))

val df = sqlContext.createDataFrame(rows, struct)

df.describe().show()

最后一行给了我:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

当然这意味着一些不好的数据。奇怪的是,我可以“收集”整个数据集而不会出现问题,这意味着每一行都正确地符合模式中描述的IntegerType。同样奇怪的是,当我在R中打开数据集时,我找不到任何NA值。

2 个答案:

答案 0 :(得分:1)

为什么不使用databricks-csv阅读器(https://github.com/databricks/spark-csv)?从csv文件创建数据框架更容易,更安全,它允许您定义字段的架构(并避免出现转换问题)。

代码实现起来非常简单:

myDataFrame = sqlContext.load(source="com.databricks.spark.csv", header="true", path = myFilePath)

问候,

JG

答案 1 :(得分:1)

我发现了错误。有必要在每个行条目中添加SET PATH=%PATH%;C:\CmdShortcuts

toInt