首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用列值的切片结构数组

使用列值的切片结构数组
EN

Stack Overflow用户
提问于 2019-01-04 02:01:36
回答 1查看 418关注 0票数 1

我想使用开始和长度定义为Column(s)的Spark slice函数。

def slice(x: Column, start: Int, length: Int): Column

x看起来像这样:

代码语言:javascript
复制
`|-- x: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- a: double (nullable = true)
 |    |    |-- b : double (nullable = true)
 |    |    |-- c: double (nullable = true)
 |    |    |-- d: string (nullable = true)
 |    |    |-- e: double (nullable = true)
 |    |    |-- f: double (nullable = true)
 |    |    |-- g: long (nullable = true)
 |    |    |-- h: double (nullable = true)
 |    |    |-- i: double (nullable = true)
...
`

有关于如何实现这一点的想法吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-04 03:30:03

您不能使用内置的UDF DSL函数slice (因为它需要恒定的切片边界),您可以使用DataFrame。如果df是您的数据帧,并且您有一个fromuntil列,那么您可以这样做:

代码语言:javascript
复制
val mySlice = udf(
  (data:Seq[Row], from:Int, until:Int) => data.slice(from,until),
  df.schema.fields.find(_.name=="x").get.dataType
)

df
  .select(mySlice($"x",$"from",$"until"))
  .show()

或者,您可以在Spark SQL中使用SQL-Expression:

代码语言:javascript
复制
df
   .select(expr("slice(x,from,until)"))
   .show()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54027488

复制
相关文章

相似问题

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