Weitere ähnliche Inhalte
Ähnlich wie Apache Spark + Arrow (20)
Mehr von Takeshi Yamamuro (20)
Kürzlich hochgeladen (11)
Apache Spark + Arrow
- 3. 3
What’s Spark?
Apache Spark 2015 Year In Review,
https://bit.ly/2JaG0He
• AMPLab@UC Berkeleyの成果で,2012年にOSSとして公開され
た汎⽤的な分散・並列処理フレームワーク
– 現在の最新がv2.4.4、現在はv3.0のリリースに向けて準備中
• 代表的な特徴はユーザが使
いやすいAPI,外部データ
との連携,内部での⾼度な
最適化
- 7. • @pandas_udfは内部的にArrowで⾼速化
– @udf はv2.2まで使⽤されていたUDF⽤のアノテーション
7
PySpark UDF Performance
Benchmark Code: https://bit.ly/2LITA7c
70.93
19.92
@udf @pandas_udf
UDF: (x, y) => x + y
Accelerated by
- 9. • spark.sql.execution.arrow.maxRecordsPerBatch (default: 10000)
– Arrowによるデータ転送(SerDe)で1回の転送に含める⾏数,設定値
を⼤きくすると使⽤メモリ量が増⼤
• spark.sql.execution.arrow.enabled (default: false)
– Spark/Pandas Dataframeの相互変換を⾏うtoPandas/createDataFrameの
処理においてArrowによる最適化の有効化
• spark.sql.execution.arrow.fallback.enabled (default: true)
– Arrowによるデータ転送が⾏えない場合(e.g., 未サポートの型)に
Arrowを使わないデータ転送に切り替える機能の有効化
9
Configurations for Arrow-Accelerated Processing
v2.4.4におけるArrowに関係する設定は3つだけ
- 11. • 上記の組み合わせで@pandas_udf の処理がエラーで停⽌
– 原因: v0.15.0からIPCで使⽤するバイナリフォーマットが変更
• Apache Arrow 0.15.0 Release:
https://arrow.apache.org/blog/2019/10/06/0.15.0-release/
– 解決策: ARROW_PRE_0_15_IPC_FORMAT=1を設定することでv0.14.0まで
のIPCのバイナリフォーマットに変更可能
11
Notice: PySpark + PyArrow v0.15.0+ Issue
# Run the code as shown in p5 with PyArrow v0.15.1
>>> sdf.select(pandas_mean_diff(sdf[‘v’])).show()
java.lang.IllegalArgumentException at
java.nio.ByteBuffer.allocate(ByteBuffer.java:334)
at o.a.arrow.vector.ipc.message.MessageSerializer.readMessage
(MessageSerializer.java:543) at
o.a.arrow.vector.ipc.message.MessageChannelReader.readNext
(MessageChannelReader.java:58)
at org.apache.arrow.vector.ipc.ArrowStreamReader.readSchema
(ArrowStreamReader.java:132)
...
- 12. • v3.0からはSparkR においてもArrowによる最適化を適⽤
– 使⽤⽅法はPySparkと同等でデータ転送の効率化
• Spark+AI Summit Europe(2019.10)の以下の発表資料を参照
– Vectorized R Execution in Apache Spark, Hyukjin Kwon@Databricks,
https://bit.ly/2LIbmaC
12
SparkR + Arrow