提问者:小点点

SQLcontext将字符串字段更改为Long: Spark 1.5


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

感谢任何帮助。


共1个答案

匿名用户

所以我能够找到问题的解决方案。

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

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

请注意,分区列的数据类型是自动推断的。目前,支持数字数据类型和字符串类型。有时用户可能不想自动推断分区列的数据类型。对于这些用例,可以通过火花配置自动类型推断。sql.源。分区启用,默认为true。当类型推断被禁用时,分区列将使用字符串类型。

更改上述配置后,问题像魅力一样解决。:)