我有以Avro格式存儲的現有Hive數據。無論出於何種原因通過執行SELECT來讀取這些數據都非常緩慢。我還沒弄明白爲什麼。數據是分區的,我的WHERE子句總是跟在分區列之後。所以我決定通過導航到分區路徑並使用Spark SQLContext直接讀取數據。這工作更快。但是,我遇到的問題是讀取DOUBLE值。 Avro以二進制格式存儲它們。 當我執行在蜂巢以下查詢:如何使用Spark讀取Hive存儲在Avro邏輯格式中的DOUBLE值
select myDoubleValue from myTable;
我得到了正確的預期值
841.79
4435.13
.....
但下面的代碼星火:
val path="PathToMyPartition"
val sqlContext = new SQLContext(sc)
val df = sqlContext.read.avro(path)
df.select("myDoubleValue").rdd.map(x => x.getAs[Double](0))
給了我這個異常
java.lang.ClassCastException : [B cannot be cast to java.lang.Double
提供模式或將二進制格式的值轉換爲雙精度格式的正確方法是什麼?
請添加架構 –
您的價值已經出現在字符串格式?數據框中數據的格式是什麼? –
當我運行df.schema時,相關字段的格式如下:binary(nullable = true)所以我假設,也是基於我得到的錯誤,它是二元的 –