SlideShare a Scribd company logo
と
Takeshi	Yamamuro
@	NTT	Software	Innovation	Center
2
Who	Am	I	?
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,外部データ
との連携,内部での⾼度な
最適化
• 最新のSpark(PySpark)のインストール
• テスト実⾏
4
Quick	Start	Guide	for	Spark
aa$ conda install –c conda-forge pyspark
aa
$ cat test.csv
1,a,0.3
2,b,1.7
$ pyspark
>>> df = spark.read.csv(‘test.csv’)
>>> df.show()
• @pandas_udfアノテーション(v2.3+)を使い、Pandasを⽤い
て書かれたコードをSparkで分散処理
– 処理データの増⼤に対して既存コードを流⽤
– 複雑な処理をPandasのコードとして切り出してテストを容易化
5
Use	Case:	Distribute&Run Your	Pandas	Code
>>>	@pandas_udf(‘double’)
.	.	.			defpandas_mean_diff(pdf):
.	.	.							return	pdf	- pdf.mean()
>>>	sdf.select(pandas_mean_diff(sdf[‘v’])).show()
pdf:
sdf:
Pandas	DataFrame
Spark	DataFrame
• より複雑な例:	scikit-learnで作成した機械学習モデルによる
推論をSparkで分散処理
6
Use	Case:	Distribute&Run Your	Pandas	Code
#	sckit-learnで学習モデルを作成
>>>	clf =	DecisionTreeClassifier()
>>>	clf.fit(X_train,	y_train)	
#	作成したモデルをSparkクラスタで共有
>>>	broadcasted_clf=	spark.sparkContext.broadcast(clf)	
#	共有したモデルを使⽤して推論を⾏うUDFを定義
>>>	@pandas_udf(returnType='int')	
...	defpredict(*cols):	
...					X	=	pd.concat(cols,	axis=1)	
...					predicted	=	broadcasted_clf.value.predict(X)	
...					return	pd.Series(predicted)	
#	定義したUDFを⽤いて推論をSparkで分散処理
>>>	df.select('y',	predict(*X.columns).alias('predicted'))	
Example Code: https://bit.ly/357C0kp
• @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
• Sparkにおいては外部プロセス(Python,	R,	Shell)とのデータ
のやり取りにおいてArrowによる効率化を実施
8
Spark	+	Arrow	Internal
JVM	
(Driver)
User
Interaction
JVM
(Woker)
Python/R/Shell
JVM
(Woker)
Python/R/Shell
Data	Sources
Python/R
• 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つだけ
• SPARK-29376:	Upgrade	Arrow	to	v0.15.1
• SPARK-29493:	Support	Arrow	MapType
– v2.4.4で未サポートの型はMapType,ArrayType of	TimestampType,
Nested	StructType,ただしBinaryTypeはPyArrowv0.10.0+のみ
10
Current	Development	Status	for	v3.0
• 上記の組み合わせで@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)
...
• 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
• Script	TransformationはSQL構⽂上で任意のスクリプト処理を
外部プロセス経由で実⾏する拡張
• Spark+AI Summit	Europe	(2019.10)	でFacebookからデータ転送
の独⾃の改善に関する発表
– Powering	Custom	Apps	at	Facebook	using	Spark	Script	Transformation,	
Abdulrahman Alfozan@Facebook,	https://bit.ly/2q5OH0w
13
Script	Transformation	+	Arrow
p8から引⽤
• Script	TransformationはSQL構⽂上で任意のスクリプト処理を
外部プロセス経由で実⾏する拡張
14
Script	Transformation	+	Arrow
外部プロセスとして実行
• Sparkと外部プロセスの間のI/O処理の効率化
– SQL構⽂上からユーザが定義した独⾃のI/O処理を指定可能
• 開発環境ではデバック効率重視のテキスト形式、プロダク
ション環境では速度重視のバイナリ形式
– 現在はSparkの内部表現(UnsafeRow)をそのまま活⽤,今後はArrow
などの⾼効率なバイナリ形式を検討
– Int/Doubleなどの単純型でテキスト形式と⽐較して,バイナリ形式は
最⼤で4倍程度の⾼速化
• Map/Arrayなどの複雑型では性能差が拡⼤
15
Script	Transformation	+	Arrow
スライドp8から引用
• Spark	+	Arrow:	外部プロセスとのデータ転送の効率化	
– PySparkにおけるPandas	UDFsの話を中⼼に紹介	
– v3.0ではSparkRにも同様の最適化が適⽤	
	
• 宣伝:	Apache	Spark	3.0	Preview	Released:	
16
Wrap-up
https://bit.ly/2KavYHV

More Related Content

What's hot (20)

PDF
Hadoopの概念と基本的知識
Ken SASAKI
 
PDF
単なるキャッシュじゃないよ!?infinispanの紹介
AdvancedTechNight
 
PPTX
分散システムについて語らせてくれ
Kumazaki Hiroki
 
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
PPTX
CloudFront経由でのCORS利用
Yuta Imai
 
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Noritaka Sekiyama
 
PDF
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
Yahoo!デベロッパーネットワーク
 
PDF
TLS, HTTP/2演習
shigeki_ohtsu
 
PDF
Oracle Analytics Cloud のご紹介【2021年3月版】
オラクルエンジニア通信
 
PPTX
Kafkaを活用するためのストリーム処理の基本
Sotaro Kimura
 
PDF
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
PPTX
データ収集の基本と「JapanTaxi」アプリにおける実践例
Tetsutaro Watanabe
 
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
Preferred Networks
 
PDF
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
Hibino Hisashi
 
PDF
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
hamaken
 
PDF
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Cloudera Japan
 
PPTX
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
PPTX
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
 
PDF
DockerとPodmanの比較
Akihiro Suda
 
PDF
AWSのログ管理ベストプラクティス
Akihiro Kuwano
 
Hadoopの概念と基本的知識
Ken SASAKI
 
単なるキャッシュじゃないよ!?infinispanの紹介
AdvancedTechNight
 
分散システムについて語らせてくれ
Kumazaki Hiroki
 
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
CloudFront経由でのCORS利用
Yuta Imai
 
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Noritaka Sekiyama
 
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
Yahoo!デベロッパーネットワーク
 
TLS, HTTP/2演習
shigeki_ohtsu
 
Oracle Analytics Cloud のご紹介【2021年3月版】
オラクルエンジニア通信
 
Kafkaを活用するためのストリーム処理の基本
Sotaro Kimura
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
データ収集の基本と「JapanTaxi」アプリにおける実践例
Tetsutaro Watanabe
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
Preferred Networks
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
Hibino Hisashi
 
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
hamaken
 
Apache Hadoop YARNとマルチテナントにおけるリソース管理
Cloudera Japan
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
 
DockerとPodmanの比較
Akihiro Suda
 
AWSのログ管理ベストプラクティス
Akihiro Kuwano
 

Similar to Apache Spark + Arrow (20)

PDF
SparkTokyo2019NovIshizaki
Kazuaki Ishizaki
 
PDF
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
LINE Corp.
 
PDF
ビッグじゃなくても使えるSpark Streaming
chibochibo
 
PDF
Scalaでのプログラム開発
Kota Mizushima
 
PPTX
Spark CL
力世 山本
 
PPTX
Watson summit 2016_j2_5
Tanaka Yuichi
 
PDF
Apache Sparkについて
BrainPad Inc.
 
PDF
[Oracle big data jam session #1] Apache Spark ことはじめ
Kenichi Sonoda
 
PDF
OpenStack Now!
Hideki Saito
 
PPTX
Jjug ccc
Tanaka Yuichi
 
PDF
Asakusa Framework 勉強会 2014 夏
鉄平 土佐
 
PPTX
Spark Summit 2014 の報告と最近の取り組みについて
Recruit Technologies
 
PDF
OWASP Projects
Takanori Nakanowatari
 
PDF
20160127三木会 RDB経験者のためのspark
Ryuji Tamagawa
 
PPTX
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
Cloudera Japan
 
PPTX
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Junichi Noda
 
PDF
Deep Dive into Spark SQL with Advanced Performance Tuning
Takuya UESHIN
 
PDF
Interop2014 - OpenStackの概要と最新技術動向(Icehouse)
irix_jp
 
PPTX
Apache Sparkを使った感情極性分析
Tanaka Yuichi
 
PDF
ゼロから始めるSparkSQL徹底活用!
Nagato Kasaki
 
SparkTokyo2019NovIshizaki
Kazuaki Ishizaki
 
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
LINE Corp.
 
ビッグじゃなくても使えるSpark Streaming
chibochibo
 
Scalaでのプログラム開発
Kota Mizushima
 
Spark CL
力世 山本
 
Watson summit 2016_j2_5
Tanaka Yuichi
 
Apache Sparkについて
BrainPad Inc.
 
[Oracle big data jam session #1] Apache Spark ことはじめ
Kenichi Sonoda
 
OpenStack Now!
Hideki Saito
 
Jjug ccc
Tanaka Yuichi
 
Asakusa Framework 勉強会 2014 夏
鉄平 土佐
 
Spark Summit 2014 の報告と最近の取り組みについて
Recruit Technologies
 
OWASP Projects
Takanori Nakanowatari
 
20160127三木会 RDB経験者のためのspark
Ryuji Tamagawa
 
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
Cloudera Japan
 
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Junichi Noda
 
Deep Dive into Spark SQL with Advanced Performance Tuning
Takuya UESHIN
 
Interop2014 - OpenStackの概要と最新技術動向(Icehouse)
irix_jp
 
Apache Sparkを使った感情極性分析
Tanaka Yuichi
 
ゼロから始めるSparkSQL徹底活用!
Nagato Kasaki
 
Ad

More from Takeshi Yamamuro (20)

PDF
LT: Spark 3.1 Feature Expectation
Takeshi Yamamuro
 
PPT
Quick Overview of Upcoming Spark 3.0 + α
Takeshi Yamamuro
 
PDF
MLflowによる機械学習モデルのライフサイクルの管理
Takeshi Yamamuro
 
PDF
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Takeshi Yamamuro
 
PPTX
LLJVM: LLVM bitcode to JVM bytecode
Takeshi Yamamuro
 
PDF
20180417 hivemall meetup#4
Takeshi Yamamuro
 
PDF
An Experimental Study of Bitmap Compression vs. Inverted List Compression
Takeshi Yamamuro
 
PDF
Sparkのクエリ処理系と周辺の話題
Takeshi Yamamuro
 
PDF
20160908 hivemall meetup
Takeshi Yamamuro
 
PDF
20150513 legobease
Takeshi Yamamuro
 
PDF
20150516 icde2015 r19-4
Takeshi Yamamuro
 
PDF
VLDB2013 R1 Emerging Hardware
Takeshi Yamamuro
 
PDF
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
Takeshi Yamamuro
 
PDF
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
 
PDF
Introduction to Modern Analytical DB
Takeshi Yamamuro
 
PDF
SIGMOD’12勉強会 -Session 7-
Takeshi Yamamuro
 
PDF
A x86-optimized rank&select dictionary for bit sequences
Takeshi Yamamuro
 
PDF
VAST-Tree, EDBT'12
Takeshi Yamamuro
 
PDF
VLDB’11勉強会 -Session 9-
Takeshi Yamamuro
 
PDF
研究動向から考えるx86/x64最適化手法
Takeshi Yamamuro
 
LT: Spark 3.1 Feature Expectation
Takeshi Yamamuro
 
Quick Overview of Upcoming Spark 3.0 + α
Takeshi Yamamuro
 
MLflowによる機械学習モデルのライフサイクルの管理
Takeshi Yamamuro
 
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Takeshi Yamamuro
 
LLJVM: LLVM bitcode to JVM bytecode
Takeshi Yamamuro
 
20180417 hivemall meetup#4
Takeshi Yamamuro
 
An Experimental Study of Bitmap Compression vs. Inverted List Compression
Takeshi Yamamuro
 
Sparkのクエリ処理系と周辺の話題
Takeshi Yamamuro
 
20160908 hivemall meetup
Takeshi Yamamuro
 
20150513 legobease
Takeshi Yamamuro
 
20150516 icde2015 r19-4
Takeshi Yamamuro
 
VLDB2013 R1 Emerging Hardware
Takeshi Yamamuro
 
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
Takeshi Yamamuro
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
 
Introduction to Modern Analytical DB
Takeshi Yamamuro
 
SIGMOD’12勉強会 -Session 7-
Takeshi Yamamuro
 
A x86-optimized rank&select dictionary for bit sequences
Takeshi Yamamuro
 
VAST-Tree, EDBT'12
Takeshi Yamamuro
 
VLDB’11勉強会 -Session 9-
Takeshi Yamamuro
 
研究動向から考えるx86/x64最適化手法
Takeshi Yamamuro
 
Ad

Recently uploaded (7)

PDF
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PDF
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PPTX
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 
PDF
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 

Apache Spark + Arrow