2017-12-14 5 views
0

Spark 1.6.0でDataframeの列のリストの種類を変更しようとしています。以下のためにこれを行うのいずれかの効率的な、バッチ方法はありデータフレーム列のリストの列の種類を変更する方法

val castedDF = filteredDf.columns.foldLeft(filteredDf)((filteredDf, c) => filteredDf.withColumn(c, col(c).cast("String"))) 

:見つけ

すべての例では、これまでのところしかし、唯一の単一の列(df.withColumn)またはデータフレーム内のすべての列のためにキャストが可能データフレーム内の列のリスト?

答えて

1

ありwithColumnと間違って何も*ありませんが、あなたが好む場合はselectを使用することができます。

import org.apache.spark.sql.functions col 

val columnsToCast: Set[String] 
val outputType: String = "string" 

df.select(df.columns map (
    c => if(columnsToCast.contains(c)) col(c).cast(outputType) else col(c) 
): _*) 

*実行計画がwithColumnをチェーンのように単一の選択のために同じになります。

+0

'withColumn'と' select'は完全に同等です - 実行計画は_identical_になります。 – user8371915

関連する問題