取消
顯示的結果
而不是尋找
你的意思是:

PySpark pandas_udf低於單線程

twotwoiscute
新的因素

我使用

@pandas_udf
編寫一個函數,加快這個過程(解析xml文件),然後比較它與單線程的速度,令人驚訝的是,使用
@pandas_udf
比單線程代碼慢兩倍。我需要解析和xml文件的數量大約是20000。下麵的代碼顯示了我做了什麼:

火花= SparkSession.builder.appName (EDA) .getOrCreate () spark.conf.set (“spark.sql.execution.arrow。啟用”、“真實”)spark.conf.set (“spark.sql.execution.arrow。maxRecordsPerBatch”、“64”)
@pandas_udf (ArrayType (ArrayType (IntegerType ()))) def parse_xml (xml_names: pd.Series) - > pd。係列:結果= []xml_name xml_names:樹= ET.parse (xml_name)根= tree.getroot () keep_boxes =[]的obj root.iter(“對象”):class_id = int (obj.find(“名字”)。文本)盒= obj.find (“bndbox”) xmin = int (boxes.find (“xmin”)。text) ymin = int (boxes.find (“ymin”)。text) xmax = int (boxes.find (“xmax”)。text) ymax = int (boxes.find (“ymax”)。text) keep_boxes。追加([class_id、xmin ymin, xmax, ymax]) results.append (keep_boxes)返回pd.Series(結果)
#收集所有數據從不同的文件夾數據= np.array (get_data ()) .T.tolist()模式= StructType ([StructField (img_name, StringType(),真的),StructField (xml_name, StringType(),真的)])num_cores = 20 #(核心數量我有)muls = 3 df = spark.createDataFrame(數據、模式).repartition (muls * num_cores) pdf_box = df.select(坳(“img_name”), parse_xml(坳(xml_name)) .alias(“盒子”)).toPandas ()

據我所知,因為我使用for循環利用

pandas_udf
將會消失,因為它不能整個批處理過程,然而,我仍然認為它應該比單線程因為更快
火花
數據分解成parititons,而且平行處理它們。如果上麵的概念,我說錯了請糾正我。

所以我想知道為什麼它甚至低於單線程的代碼。是因為我寫的代碼或一些重要的想法,我隻是小姐,謝謝!

1回複1

Kaniz
社區經理
社區經理

你好@twotwoiscute!我的名字叫Kaniz,我這裏的技術主持人。很高興認識你,謝謝你的問題!看看你的同行在論壇上先回答你的問題。否則我們將很快跟進與回複。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map