我已经将我的记录保存为拼花格式,并且正在使用Spark1.5。但是当我尝试获取列时,它会引发异常
java. lang.ClassCastException:java.lang.Long无法强制转换为org.apache.park.un安全.type.UTF8String。
这个文件在编写parque时保存为String。所以这是示例代码和输出…
logger.info("troubling thing is ::" +
sqlContext.sql(fileSelectQuery).schema().toString());
DataFrame df= sqlContext.sql(fileSelectQuery);
JavaRDD<Row> rdd2 = df.toJavaRDD();
*代码中的第一行(记录器)打印以下内容:
麻烦的是::结构类型(结构字段(batch_id, StringType,true))*
但是在它之后的那一刻,例外出现了。
知道为什么它将字段视为Long
吗?(是的,列的一个独特之处是它总是一个数字,例如时间戳)。
感谢任何帮助。
所以我能够找到问题的解决方案。
http://spark.apache.org/docs/latest/sql-programming-guide.html#partition-discovery
请注意,分区列的数据类型是自动推断的。目前,支持数字数据类型和字符串类型。有时用户可能不想自动推断分区列的数据类型。对于这些用例,可以通过火花配置自动类型推断。sql.源。分区启用,默认为true。当类型推断被禁用时,分区列将使用字符串类型。
更改上述配置后,问题像魅力一样解决。:)