我在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 中类型归属的目的是什么?