如何从List创建DataFrame?

时间:2018-01-26 20:03:16

标签: scala apache-spark dataframe apache-spark-sql

我想创建一个看起来很简单的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|
+---------+----------+

这里有什么问题?

3 个答案:

答案 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: _*)

其中columnNamesList的名称。