Spark重命名数据帧列

时间:2017-01-13 23:41:37

标签: apache-spark dataframe spark-dataframe

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

我正在寻找类似的东西:

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)

这可能吗?

1 个答案:

答案 0 :(得分:2)

一种方法是使用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中的类型归属(意味着我们可以给出一个列表作为参数,它仍然有效,将相同的函数应用于所述列表的每个成员)

更多信息:What is the purpose of type ascriptions in Scala?