@MerelyPerfect /:
當使用自動裝卸機磚,推理的模式是基於前幾行數據。如果JSON文件有一個一致的結構,你可以嚐試將“inferSchema”選項設置為“true”的自動裝卸機的選擇。這將使自動裝卸機試圖推斷出該模式的前幾行數據。
這裏有一個例子如何使用模式推理的自動裝卸機磚:
python
從pyspark.sql。功能導入from_json,從pyspark.sql坳。類型進口StructType、StructField IntegerType StringType #定義模式提示schema_hints = StructType ([StructField(“抵消”IntegerType ()), StructField(“價值”,StringType()))) #定義自動裝卸機選擇選項={“模式”:schema_hints.json (),“inferSchema”:“true”} #加載數據使用Autoloader df = spark.read.format (cloudFiles) \ .options(* *選項)\ .load (“abfss: / /(電子郵件保護)/ myfolder / * . JSON) #解析”價值從base64 JSON df = df”專欄。withColumn(“價值”,from_json(坳(“價值”).cast(“字符串”),schema_hints(“價值”).dataType)) #顯示結果DataFrame df.show ()
在這個例子中,我們首先定義模式提示兩個字段,“抵消”和“價值”。然後,我們定義自動裝卸機選項和“inferSchema”設置為“true”。這告訴自動裝卸機試圖推斷出從數據的模式。
然後我們使用自動裝卸機加載數據和解析“價值”列從base64 JSON使用
from_json函數。最後,我們展示結果DataFrame。
如果JSON文件有一個更複雜的結構,無法推斷出的前幾行數據,您可能需要手動定義模式使用提示。
json是複雜的嵌套10到15水平。所以手動定義json模式是不可能的,不易於維護,因為它的變化。
上麵的代碼並不奏效。
我需要考慮另一種方式。
我可以重寫json消息到另一個json文件,僅僅通過二進製轉換為json。
無論我嚐試,它將二進製數據和把它寫成的json字符串。我怎麼能把它寫成json不定義json的模式。
所有可能的方法寫base64轉義字符串形式的價值。
如。輸出的樣子
{
“抵消”:1、
“價值”:“{\“key1 \”, \“價值\”..................}”
}