Databricksの一つの特徴として、Python, SQL, R, Scalaの4つの言語が使用できます。これによって、Pythonを使うデータエンジニア、SQLを使うビジネスアナリスト、Rを使うデータサイエンティスト、Scalaを使う研究者など、様々なペルソナが一つのデータ・分析をコラボレーションできるというメリットが享受できます。
もちろん、こられの4つの言語を一つのNotebook上で並行して使用することができます。今回は、それぞれの言語間でデータを相互参照/利用する方法について見ていきます。
基本方針
基本的に、Datafarmeにtemp viewを割り当てて、各言語からそのview名でアクセスすることでDataframeを共有できます。
実際のコード例
0. サンプルのDatafarmeの準備
%python
df_python = (
spark
.read
.format('csv')
.option('Header', True)
.option('inferSchema', True)
.load('/databricks-datasets/learning-spark-v2/flights/departuredelays.csv')
)
display(df_python)
1. Python -> Scala, R, SQL
Python上でDataframeにtemp viewを割り当てる
%python
# daraframeにtemp viewを割り当てる
df_python.createOrReplaceTempView('sample_dataframe')
Scalaで受け取る
%scala
val df_scala = spark.table("sample_dataframe")
display(df_scala)
val df_scala_by_sql = spark.sql("SELECT * FROM sample_dataframe")
display(df_scala_by_sql)
Rで受け取る
%r
require(SparkR)
df_r <- sql("SELECT * FROM sample_dataframe")
display(df_r)
SQLで受け取る
%sql
SELECT * FROM sample_dataframe
2. Scala, R -> Python
同様にtemp view化して、pythonから参照する
scalaでtemp viewを作る
%scala
df_scala.createOrReplaceTempView("df_scala_tempview")
Rでtemp viewを作る
%r
require(SparkR)
createOrReplaceTempView(df_r, "df_r_tempview")
pythonで受け取る
%python
# 1. Scalaから受け取る
df_from_scala = spark.table('df_scala_tempview')
## もしくは、以下でもOK
# df_from_scala = spark.sql('SELECT * FROM df_scala_tempview')
display( df_from_scala )
# 2. Rから受け取る
df_from_r = spark.table('df_r_tempview')
## もしくは、以下でもOK
# df_from_r = spark.sql('SELECT * FROM df_r_tempview')
display( df_from_r )