我想改變一個DF用一個簡單的UDF。後來我想在一個新表存儲生成的DF(參見下麵的代碼)
關鍵=“test_key”模式= StructType ([StructField (“* * *”, StringType(),真的),StructField(“多”,StringType(),真的),StructField(打鼾聲,StringType(),真的),])def custom_udf(數據):……返回(“測試”、“測試”、“測試)customUDF = udf (custom_udf、模式)result_df = big_df.filter(坳(“關鍵”)= =留有遺囑)。withColumn(“結果”,customUDF(坳(“數據”)))result_df = result_df。選擇(“*”,上校(“。*”)).drop (col(“結果”))打印(result_df.count ()) test_df = result_df.collect()打印(test_df.show (5) result_df.write.saveAsTable (“default.test_table”)
我有性能問題,希望更好地理解性能問題來自哪裏以及如何處理它們。
big_df ~ 170緒條目。
result_df ~ 18緒條目。
第17行:打印(result_df.count()) = >跑得快(1秒)
18/19/20行:非常非常緩慢(花了90分鍾! !)
起初我以為UDF減慢轉換。但我想轉換已經執行第17行後,我叫數()。我沒有一種直覺為什麼其餘如此緩慢。
我怎麼能加快寫一個表嗎?我怎樣才能更好的調試問題解決它自己下次?
編輯:
攝取csv數據流自動加載器和存儲數據作為三角洲表在幾秒內發生。所以我不明白為什麼寫DataFrame表是如此緩慢。