我有一个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值。
答案 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