我有一个输入文件,看起来很像csv,但带有自定义标头:
FIELDS-START
field1
field2
field3
FIELDS-END-DATA-START
val1,2,3
val2,4,5
DATA-END
任务: 要将数据读取到类型化的数据框中,将动态获取模式,例如此特定文件的示例:
val schema = StructType(
StructField("field1", StringType, true) ::
StructField("field2", IntegerType, true) ::
StructField("field3", IntegerType, true) :: Nil
)
因此,由于自定义标头的原因,我不能使用spark csv阅读器。我尝试过的另一件事:
val file = spark.sparkContext.textFile(...)
val data: RDD[List[String]] = file.filter(_.contains(",")).map(_.split(',').toList)
val df: DataFrame = spark.sqlContext.createDataFrame(data.map(Row.fromSeq(_)), schema)
由于运行时异常而失败
java.lang.String不是int模式的有效外部类型,这是因为 createDataFrame 不执行任何强制转换。
注意:模式是在运行时获取的
谢谢!