如何以编程方式创建不是字符串类型的数据帧



我正在构建一个相当大的模式,所以我使用文档中的编程模式创建示例。

val schemaString = "field1,...,field126"
val schema = StructType(schemaString.split(",").map(fieldName => StructField(fieldName.trim, StringType, true)))

这工作得很好,但我需要有所有字段为我的ML函数的DoubleType。我将StringType更改为DoubleType,并得到一个错误。

val schemaString = "field1,...,field126"
val schema = StructType(schemaString.split(",").map(fieldName => StructField(fieldName.trim, DoubleType, true)))
错误:

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
at scala.runtime.BoxesRunTime.unboxToDouble(BoxesRunTime.java:119)

我知道我可以手动创建模式,但是126个字段的代码变得庞大。

val schema = new StructType()
.add("ColumnA", IntegerType)
.add("ColumnB", StringType)
val df = sqlContext.read
.schema(schema)
.format("com.databricks.spark.csv")
.delimiter(",")
.load("/path/to/file.csv")

我认为没有必要传递你自己的模式,它会自动推断它,如果你的csv文件包含列的名称,那么它也会接受它,如果你设置标题为true

这将工作简单(未测试):

val df = sqlContext.read
  .format("com.databricks.spark.csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .load("data/sample.csv")

它会给你一个数据框,如果你有列名,那么就把header设置为true !

相关内容

  • 没有找到相关文章

最新更新