文字列がcol1
、配列列がcol2
のDataFrameがあるとします。私は、Spark操作で舞台裏で何が起こるか疑問に思った:スパーク選択分解イディオムはどのように実装されていますか?
df.select('col1', explode('col2'))
selectが入力としてColumn
オブジェクトのシーケンスを取り、explodeはColumn
ので、タイプが一致を返すようです。しかし、explode('col2')
によって返される列は、論理的にはcol1
とは異なる長さなので、出力DataFrameを構築する際にselectがどのように "同期"するのか不思議でした。私は手がかりのためにColumnクラスを見てみましたが、本当に何も見つかりませんでした。
ありがとうございます!私の質問は、技術的にはデータフレームに関するものでしたが、私はそれが同じことを推測しています。これは[これの例です](https://github.com/apache/spark/blob/v2.0.0-rc1/sql/core/src/main/scala/org/apache/spark/sql/Dataset.scala# L1587-L1604)をDataset.scalaソースから削除します。 – hillel
'DataFrame'は' Dataset [Row] 'です。 – zero323