[英]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.