Spark 重命名数据帧列



我在HDFS中有2个文件 - 一个是没有标题的csv文件,一个是列名列表。 我想知道是否可以将列名称分配给另一个数据框,而无需像此处描述的那样实际键入它们。

我正在寻找这样的东西:

val df = sqlContext.read.format("com.databricks.spark.csv").option("delimiter", "t").load("/user/training_data.txt")
val header = sqlContext.read.format("com.databricks.spark.csv").option("delimiter", ",").load("/user/col_names.txt")
df.columns(header)

这可能吗?

一种方法是使用如下scala.io读取头文件:

import scala.io.Source
val header = Source.fromFile("/user/col_names.txt").getLines.map(_.split(","))
val newNames = header.next

然后,像您一样使用 spark-csv 读取 CSV 文件,不指定标头并转换名称,如下所示:

val df = spark.read.format("com.databricks.spark.csv")
         .option("header", "false").option("delimiter", "t")
         .load("/user/training_data.txt").toDF(newNames: _*)

请注意_*类型批注。

_* 是 Scala 中的类型归属(这意味着我们可以给出一个列表作为参数,它仍然可以工作,将相同的函数应用于所述列表的每个成员)

更多内容:Scala 中类型归属的目的是什么?

最新更新