你好,
在我們的場景中我們讀取json文件作為輸入,並包含嵌套結構。的一些屬性結構體數組類型。我們需要改變名字的嵌套的。我們創建了一個新的結構和做演員。
我們正麵臨著以下問題在做
例:測試是進行結構體類型
{“測試”:[{“nestedattr1”:“df”、“columnfield”:“呃”}]
我們需要一個以上
{“測試”:[{“nestedAttr1”:“df”、“columnField”:“呃”}]
我們定義了一個新的結構和應用但當我們正在接受測試作為一個空數組{“測試”:[]}鑄造越來越失敗了。所以我們試圖應用下麵的代碼,但它不工作
df = df.withColumn(“測試”,當(大小(df.test) > 0,坳(“測試”).cast (newteststruct)) .otherwise (df.test))
錯誤:不能解決的“測試”由於數據類型不匹配:不能把數組<字符串>陣列<結構>
請添加你的評論來避免這個問題
我們使用以下條件解決問題
如果dict (df.dtypes)['測試']! =“數組<字符串>”:
df = df.withColumn(“測試”,(“測試”)上校.cast (newteststruct))
謝謝你!
你好,
謝謝你的回複. .
我們使用以下結構來改變/數組類型結構與嵌套的新名稱
newteststruct = ArrayType (StructType ([
StructField (“nestedAttr1 StringType ()),
StructField (“columnField StringType ()))))
以json格式輸入將來自其他來源,我們讀到磚df。
這裏我們應用模式轉換根據業務水平得到輸出目標模式。
所以當鑄造我們麵臨一個問題,當我們得到一個空數組通過i / p提取。
謝謝你!
有可能你{“測試”:[]}替換為{“測試”:[{“nestedattr1”:“”,“columnfield”:“}]} ?
因為我認為那和其他表達式應該具有相同的類型。