問題
在S3中我有一個目錄和一係列的數據文件,如“數據- 20221101.鋪”。他們都有相同的列:時間戳,reading_a, reading_b reading_c。在前麵的文件,閱讀是浮動,但在後來的雙打。當我運行下麵的閱讀,這失敗由於合並失敗。
從pyspark.sql。功能導入坳,從pyspark.sql expr。類型進口倍增式、LongType StructField StructType模式= StructType ([StructField(“時間戳”,LongType ()), StructField (“reading_a倍增式()),StructField (“reading_b倍增式()),StructField (“reading_c倍增式()),])(spark.read.schema(模式).option (“mergeSchema”,假).parquet (s3: / /閱讀/道路/ /數據/數據- * .parquet) .write .saveAsTable (readings.data))
和它給以下錯誤:
. lang。org.apache.spark.sql.catalyst.expressions ClassCastException。org.apache.spark.sql.catalyst.expressions.MutableFloat MutableDouble不能投
嚐試
我認為是怎麼回事
浮子式火花讀取一個文件,然後試圖繼續閱讀文件,向上轉型雙類型之前,但這失敗當它到達文件的兩倍。真的火花應該服從我的模式從一開始就和總是向上的。
更多信息
別人做了相當深入探究解決這個和展示了不同的方法,但他們最終的解決方案是一個黑客和不可持續的。他們分別讀取每個文件,然後將他們的模式,然後合並它們。這火花的否定很多好處神奇的閱讀能力。
https://medium.com/data-arena/merging-different-schemas-in-apache-spark-2a9caca2c5ce
問題
我怎麼能讀許多文件隻有稍微不同的鑲花類型,而不必做這個黑客?