如何将所有数据框的所有列转换为数字Spark Scala



我将CSV加载为数据框。我想将所有列施放到浮动中,知道文件是大的写入所有列名称的大:

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")

给定此数据框架作为示例:

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

带有模式:

StructType(
    StructField(id,StringType,true), 
    StructField(c0,IntegerType,false))

您可以通过 .columns 函数循环DF列循环:

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))

请注意,也许这不是做到这一点的最佳解决方案,但可以是起点。

相关内容

  • 没有找到相关文章

最新更新