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