2017-01-13 22 views
1

私はHDFSに2つのファイルを持っています.1つはヘッダーのないcsvファイルで、1つは列名のリストです。私は実際に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?

関連する問題