首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >和动态列列表中的DataFrame选择方法

和动态列列表中的DataFrame选择方法
EN

Stack Overflow用户
提问于 2018-12-05 15:28:08
回答 1查看 810关注 0票数 1

为了解析固定宽度的txt文件,我有以下Scala代码:

代码语言:javascript
复制
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")
)

我想提取以下代码:

代码语言:javascript
复制
  df("value").substr(0, 6).cast("integer").alias("id"),
  df("value").substr(7, 6).alias("date"),
  df("value").substr(13, 29).alias("string")

进入动态循环,以便能够在某些外部配置中定义列解析,如下所示(其中x将保存每个列解析的配置,但就目前而言,这是演示中的简单数字):

代码语言:javascript
复制
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")没有使用以下错误进行编译:

代码语言:javascript
复制
type mismatch; found : org.apache.spark.sql.Column required: Int ⇒ ?

我做错了什么?如何正确返回df.select方法中的动态列列表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-05 16:17:19

select不会将语句作为输入,但可以保存要创建的Columns,然后将表达式作为select的输入展开。

代码语言:javascript
复制
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: _*)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53635620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档