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)
我感谢任何帮助解决铸造问题。
谢谢。
DataFrames是不可变的。您的代码DataFrame为每个值创建新值并丢弃它。
最好使用map和select:
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)
| 归档时间: |
|
| 查看次数: |
4180 次 |
| 最近记录: |