2017-01-13 106 views
1

我在HDFS中有2個文件 - 一個是沒有標題的csv文件,一個是列名稱列表。我想知道是否可以將列名分配給其他數據框,而不需要像描述的here那樣輸入它們。Spark重命名數據框列

我正在尋找這樣的事情:

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) 

這可能嗎?

回答

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?