我已将记录保存为拼花格式,并使用Spark1.5。但当我试图获取列时它会抛出异常
. lang。ClassCastException: java.lang.Long不能强制转换为org.apache.spark.unsafe.types.UTF8String.
在写拼花时,这个文件被保存为字符串。所以这里是示例代码和输出相同的…
logger.info("troubling thing is ::" +
sqlContext.sql(fileSelectQuery).schema().toString());
DataFrame df= sqlContext.sql(fileSelectQuery);
JavaRDD<Row> rdd2 = df.toJavaRDD();
*代码中的第一行(Logger)打印如下:
麻烦的事情是::StructType(StructField(batch_id,StringType,true))*
但是紧接着异常就出现了。
知道为什么它把这个场当作Long
吗?(是的,column的一个独特之处在于它总是一个数字,例如时间戳)。
任何帮助都是感激的。
这样我就能找到解决问题的方法了。
- 我没有开始使用SCALA。
- 做了更多的搜索和阅读,发现了这个:
http://spark.apache.org/docs/latest/sql-programming-guide.html partition-discovery
注意分区列的数据类型是自动推断。目前,数据类型分为数值型和字符串型都受支持。有时用户可能不希望自动推断出分区列的数据类型。对于这些用例自动类型推断可以通过 spark.sql.sources.partitionColumnTypeInference。enabled,即默认为true。当类型推断被禁用时,字符串类型将为用于分区列。
并且在改变上述配置后,问题就像魔法一样解决了。:)