我想创建一个看起来很简单的DataFrame df
:
+----------+----------+
| timestamp| col2|
+----------+----------+
|2018-01-11| 123|
+----------+----------+
这就是我的所作所为:
val values = List(List("timestamp", "2018-01-11"),List("col2","123")).map(x =>(x(0), x(1)))
val df = values.toDF
df.show()
这就是我得到的:
+---------+----------+
| _1| _2|
+---------+----------+
|timestamp|2018-01-11|
| col2| 123|
+---------+----------+
这里有什么问题?
答案 0 :(得分:4)
使用
val df = List(("2018-01-11", "123")).toDF("timestamp", "col2")
toDF
期望输入列表包含每个结果行的一个条目toDF
的参数传递)答案 1 :(得分:1)
编辑(抱歉,我错过了你的标题粘在每一列上)。 也许这样的事情可行:
val values = List(
List("timestamp", "2018-01-11"),
List("col2","123")
)
val heads = values.map(_.head) // extracts headers of columns
val cols = values.map(_.tail) // extracts columns without headers
val rows = cols(0).zip(cols(1)) // zips two columns into list of rows
rows.toDF(heads: _*)
如果“值”包含两个较长的列表,则会起作用,但它不会推广到更多列表。
答案 2 :(得分:1)
如果您不静态地知道列的名称,可以使用以下语法sugar
.toDF( columnNames: _*)
其中columnNames
是List
的名称。