簡體   English   中英

DataFrame select方法內的Scala Apache Spark和動態列列表

[英]Scala Apache Spark and dynamic column list inside of DataFrame select method

我有以下Scala Spark代碼以解析固定寬度的txt文件:

val schemaDf = df.select(
  df("value").substr(0, 6).cast("integer").alias("id"),
  df("value").substr(7, 6).alias("date"),
  df("value").substr(13, 29).alias("string")
)

我想提取以下代碼:

  df("value").substr(0, 6).cast("integer").alias("id"),
  df("value").substr(7, 6).alias("date"),
  df("value").substr(13, 29).alias("string")

為了能夠在某些外部配置中定義列解析而進入動態循環,如下所示(其中x將保存每個列解析的配置,但現在這是用於演示目的的簡單數字):

val x = List(1, 2, 3)
val df1 = df.select(
    x.foreach { 
        df("value").substr(0, 6).cast("integer").alias("id") 
    }
)

但是現在,以下行df("value").substr(0, 6).cast("integer").alias("id")不會出現以下錯誤:

type mismatch; found : org.apache.spark.sql.Column required: Int ⇒ ?

我在做什么錯以及如何正確返回df.select方法內的動態列列表?

select不會將語句作為輸入,但是您可以保存要創建的Columns ,然后將表達式擴展為select輸入:

val x = List(1, 2, 3)
val cols: List[Column] = x.map { i =>
  newRecordsDF("value").substr(0, 6).cast("integer").alias("id")
}
val df1 = df.select(cols: _*)

暫無
暫無

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

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