gpt4 book ai didi

scala - 如何将数据框的所有列转换为数字 Spark scala?

转载 作者:行者123 更新时间:2023-12-04 23:39:24 26 4
gpt4 key购买 nike

我加载了一个 csv 作为数据框。我想将所有列转换为 float ,知道文件太大无法写入所有列名:

val spark = SparkSession.builder.master("local").appName("my-spark-app").getOrCreate()
val df = spark.read.option("header",true).option("inferSchema", "true").csv("C:/Users/mhattabi/Desktop/dataTest2.csv")

最佳答案

以这个 DataFrame 为例:

val df = sqlContext.createDataFrame(Seq(("0", 0),("1", 1),("2", 0))).toDF("id", "c0")

使用架构:
StructType(
StructField(id,StringType,true),
StructField(c0,IntegerType,false))

您可以通过 遍历 DF 列.columns 职能:
val castedDF = df.columns.foldLeft(df)((current, c) => current.withColumn(c, col(c).cast("float")))

所以新的 DF 架构看起来像:
StructType(
StructField(id,FloatType,true),
StructField(c0,FloatType,false))

编辑:

如果您想从转换中排除某些列,您可以执行以下操作(假设我们要排除列 id ):
val exclude = Array("id")

val someCastedDF = (df.columns.toBuffer --= exclude).foldLeft(df)((current, c) =>
current.withColumn(c, col(c).cast("float")))

哪里 exclude是我们想要从转换中排除的所有列的数组。

所以这个新 DF 的架构是:
StructType(
StructField(id,StringType,true),
StructField(c0,FloatType,false))

请注意,这可能不是最好的解决方案,但它可以作为一个起点。

关于scala - 如何将数据框的所有列转换为数字 Spark scala?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42532347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com