既存のスキーマに一致する可能性のある文字列のリストからDataFrameを作成したい。これが私のコードです。
val rowValues = List("ann", "f", "90", "world", "23456") // fails
val rowValueTuple = ("ann", "f", "90", "world", "23456") //works
val newRow = sqlContext.sparkContext.parallelize(Seq(rowValueTuple)).toDF(df.columns: _*)
val newdf = df.unionAll(newRow).show()
文字列のリストを使用すると、同じコードが失敗します。違いはrowValueTuple
とTuple
が作成されることです。 rowValues
リストのサイズは動的に変化するため、手動でTuple*
オブジェクト。これどうやってするの?何が欠けていますか?要件を満たすためにこのリストをフラット化するにはどうすればよいですか?
あなたの助けを感謝してください。
DataFrameには固定列数のスキーマがあるため、可変長のリストごとに行を作成するのは自然ではないようです。とにかく、次のように既存のスキーマを使用してRDD [Row]からDataFrameを作成できます。
val rdd = sqlContext.sparkContext.parallelize(Seq(rowValues))
val rowRdd = rdd.map(v => Row(v: _*))
val newRow = sqlContext.createDataFrame(rdd, df.schema)