转换数据框中列的类型

Hoo*_* M. 1 scala apache-spark

我的 Spark 程序需要读取一个包含整数矩阵的文件。列用“,”分隔。每次运行程序时,列数都不相同。

我将文件作为数据帧读取:

var df = spark.read.csv(originalPath);

但是当我打印模式时,它给了我所有的列作为字符串。

我将所有列转换为整数,如下所示,但之后当我再次打印 df 的架构时,列仍然是字符串。

df.columns.foreach(x => df.withColumn(x + "_new", df.col(x).cast(IntegerType))
.drop(x).withColumnRenamed(x + "_new", x));
Run Code Online (Sandbox Code Playgroud)

我感谢任何帮助解决铸造问题。

谢谢。

hi-*_*zir 5

DataFrames是不可变的。您的代码DataFrame为每个值创建新值并丢弃它。

最好使用mapselect

val newDF = df.select(df.columns.map(c => df.col(c).cast("integer")): _*)
Run Code Online (Sandbox Code Playgroud)

但你可以foldLeft

df.columns.foldLeft(df)((df, x) => df.withColumn(x , df.col(x).cast("integer")))
Run Code Online (Sandbox Code Playgroud)

甚至(请不要)可变参考:

var df = Seq(("1", "2", "3")).toDF

df.columns.foreach(x => df = df.withColumn(x , df.col(x).cast("integer")))
Run Code Online (Sandbox Code Playgroud)