SQLcontext changing String field to Long : Spark 1.5



我已将记录保存为拼花格式,并使用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的一个独特之处在于它总是一个数字,例如时间戳)。

任何帮助都是感激的。

这样我就能找到解决问题的方法了。

  1. 我没有开始使用SCALA。
  2. 做了更多的搜索和阅读,发现了这个:

http://spark.apache.org/docs/latest/sql-programming-guide.html partition-discovery

注意分区列的数据类型是自动推断。目前,数据类型分为数值型和字符串型都受支持。有时用户可能不希望自动推断出分区列的数据类型。对于这些用例自动类型推断可以通过 spark.sql.sources.partitionColumnTypeInference。enabled,即默认为true。当类型推断被禁用时,字符串类型将为用于分区列。

并且在改变上述配置后,问题就像魔法一样解决了。:)

相关内容

  • 没有找到相关文章