それは動的に可変個の引数を取らないようスパークSQLでposexplode()への代替は何ですか?

サンディープサマル:
val result = df.select($"seq_id", posexplode(array($"prod_id", $"prod_name")))

上記の例でposexplodeサイドアレイ内の列名の任意の配列をとりません()。列名をハードコーディングすることは必須です。ハードコードを削除して、動的に任意の数の列を追加する方法はありますか?

アレクサンドロスBiratsis:

あなたは、関数から見ることができるように宣言 array(cols: Column*): Column私たちは、配列関数のパラメータとして、一つ以上のCOLを渡すことができます。これは、任意の文字列のリストから列のアレイを生成することによって、動的に行うことができます。

import org.apache.spark.sql.functions.{posexplode, col, array}

val cols = Seq("prod_id", "prod_name").map{col(_)}
val customArray = array(cols:_*)

df.select(customArray).show

これは、同封されますprod_id, prod_name配列に、それは使用していますarrayあなたが以前と同様の機能を。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=239392&siteId=1