データフレームでSpark SQLを使用しています。私は入力データフレームを持っており、より多くの列を持つより大きなデータフレームにその行を追加(または挿入)したいと思います。どうすればいい?Spark SQL:(別のテーブルの)データフレームテーブルに新しい行を追加する方法
これがSQLの場合は、INSERT INTO OUTPUT SELECT ... FROM INPUT
を使用しますが、Spark SQLでこれを行う方法はわかりません。具体性のために
:
var input = sqlContext.createDataFrame(Seq(
(10L, "Joe Doe", 34),
(11L, "Jane Doe", 31),
(12L, "Alice Jones", 25)
)).toDF("id", "name", "age")
var output = sqlContext.createDataFrame(Seq(
(0L, "Jack Smith", 41, "yes", 1459204800L),
(1L, "Jane Jones", 22, "no", 1459294200L),
(2L, "Alice Smith", 31, "", 1459595700L)
)).toDF("id", "name", "age", "init", "ts")
scala> input.show()
+---+-----------+---+
| id| name|age|
+---+-----------+---+
| 10| Joe Doe| 34|
| 11| Jane Doe| 31|
| 12|Alice Jones| 25|
+---+-----------+---+
scala> input.printSchema()
root
|-- id: long (nullable = false)
|-- name: string (nullable = true)
|-- age: integer (nullable = false)
scala> output.show()
+---+-----------+---+----+----------+
| id| name|age|init| ts|
+---+-----------+---+----+----------+
| 0| Jack Smith| 41| yes|1459204800|
| 1| Jane Jones| 22| no|1459294200|
| 2|Alice Smith| 31| |1459595700|
+---+-----------+---+----+----------+
scala> output.printSchema()
root
|-- id: long (nullable = false)
|-- name: string (nullable = true)
|-- age: integer (nullable = false)
|-- init: string (nullable = true)
|-- ts: long (nullable = false)
私はoutput
の終わりにinput
のすべての行を追加したいと思います。同時に、列のinit
を空の文字列''
に、ts
の列を現在のタイムスタンプに設定したいとします。 1461883875L。
ご協力いただければ幸いです。
ところで、分散データのために何の「スタート」や「終了」、あなたはインデックスの忘れてならないがありません。また、Scalaで 'var'sを使うことは悪い習慣として知られています。あなたがそれがnullableでないことを示すスキーマの 'ts'のデフォルト値は何ですか –