簡體   English   中英

如何將數據框的所有列轉換為數字火花 scala?

[英]How to convert all column of dataframe to numeric 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")

以這個 DataFrame 為例:

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

請注意,這可能不是最好的解決方案,但它可以作為一個起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM