gpt4 book ai didi

java - SQLcontext 将 String 字段更改为 Long : Spark 1. 5

转载 作者:行者123 更新时间:2023-11-30 08:08:38 25 4
gpt4 key购买 nike

我已将我的记录保存为 parquet 格式并使用 Spark1.5。但是当我尝试获取列时它抛出异常

java.lang.ClassCastException: java.lang.Long cannot be cast to org.apache.spark.unsafe.types.UTF8String.

这个字段在写parquet的时候保存为String。所以这是相同的示例代码和输出..

logger.info("troubling thing is ::" + 
sqlContext.sql(fileSelectQuery).schema().toString());

DataFrame df= sqlContext.sql(fileSelectQuery);

JavaRDD<Row> rdd2 = df.toJavaRDD();

*代码中的第一行 (Logger) 打印如下:

troubling thing is ::StructType(StructField(batch_id,StringType,true))*

但紧接着异常出现了。

知道为什么将字段视为 Long 吗? (是的,关于列的一个独特之处在于它始终是一个数字,例如时间戳)。

感谢任何帮助。

最佳答案

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

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

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

Notice that the data types of the partitioning columns are automatically inferred. Currently, numeric data types and string type are supported. Sometimes users may not want to automatically infer the data types of the partitioning columns. For these use cases, the automatic type inference can be configured by spark.sql.sources.partitionColumnTypeInference.enabled, which is default to true. When type inference is disabled, string type will be used for the partitioning columns.

在更改上述配置后,问题得到了很好的解决。 :)

关于java - SQLcontext 将 String 字段更改为 Long : Spark 1. 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33048779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com