为了解析固定宽度的txt文件,我有以下Scala代码:
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方法中的动态列列表?
发布于 2018-12-05 16:17:19
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: _*)https://stackoverflow.com/questions/53635620
复制相似问题