相关文章推荐
打酱油的香槟  ·  这款OCR神器再升级!速度更快、精度更高,还 ...·  2 年前    · 
讲道义的乌龙茶  ·  input type=file ...·  2 年前    · 
谦和的打火机  ·  VS安全函数问题:VS报错 ...·  2 年前    · 
爱健身的芒果  ·  android 仿 ...·  2 年前    · 
豪爽的香槟  ·  在css设置高度height:100%滚动条 ...·  2 年前    · 
Code  ›  选择DataFrame中数组的最后一个元素开发者社区
数组 披头士乐队
https://cloud.tencent.com/developer/ask/sof/125992
谈吐大方的长颈鹿
1 年前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 选择DataFrame中数组的最后一个元素

Stack Overflow用户
提问于 2018-05-30 05:09:34
EN

我正在做一个项目,我正在处理一些具有复杂模式/数据结构的嵌套JSON日期。基本上,我想要做的是过滤掉数据帧中的一列,这样我就可以选择数组中的最后一个元素。我完全不知道该怎么做。我希望这是有意义的。

下面是我试图实现的一个示例:

val singersDF = Seq(
  ("beatles", "help,hey,jude"),
  ("romeo", "eres,mia"),
  ("elvis", "this,is,an,example")
).toDF("name", "hit_songs")
val actualDF = singersDF.withColumn(
  "hit_songs",
  split(col("hit_songs"), "\\,")
actualDF.show(false)
actualDF.printSchema() 
+-------+-----------------------+
|name   |hit_songs              |
+-------+-----------------------+
|beatles|[help, hey, jude]      |
|romeo  |[eres, mia]            |
|elvis  |[this, is, an, example]|
+-------+-----------------------+
 |-- name: string (nullable = true)
 |-- hit_songs: array (nullable = true)
 |    |-- element: string (containsNull = true)

输出的最终目标如下:选择hit_songs数组中的最后一个“字符串”。

我并不担心模式之后会是什么样子。

+-------+---------+
|name   |hit_songs|
+-------+---------+
|beatles|jude     |
|romeo  |mia      |
|elvis  |example  |
+-------+---------+
3 8.4K 0 票数 4
EN
scala
apache-spark
apache-spark-sql

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-30 05:23:26

您可以使用 size 函数来计算数组中所需项的索引,然后将其作为 Column.apply 的参数传递(显式或隐式):

import org.apache.spark.sql.functions._
import spark.implicits._
actualDF.withColumn("hit_songs", $"hit_songs".apply(size($"hit_songs").minus(1)))

或者:

actualDF.withColumn("hit_songs", $"hit_songs"(size($"hit_songs").minus(1)))
票数 9
EN

Stack Overflow用户

发布于 2018-05-30 05:26:27

这里有一种方法:

val actualDF = Seq(
  ("beatles", Seq("help", "hey", "jude")),
  ("romeo", Seq("eres", "mia")),
  ("elvis", Seq("this", "is", "an", "example"))
).toDF("name", "hit_songs")
import org.apache.spark.sql.functions._
actualDF.withColumn("total_songs", size($"hit_songs")).
  select($"name", $"hit_songs"($"total_songs" - 1).as("last_song"))
// +-------+---------+
// |   name|last_song|
// +-------+---------+
 
推荐文章
打酱油的香槟  ·  这款OCR神器再升级!速度更快、精度更高,还支持80+多语言模型_Amusi(CVer)的博客-CSDN博客
2 年前
讲道义的乌龙茶  ·  input type=file 获取选择文件名称、路径方法及input上传按钮美化_input file获取文件路径_爱划水de鲸鱼哥~的博客-CSDN博客
2 年前
谦和的打火机  ·  VS安全函数问题:VS报错 该函数不安全是怎么回事?如何解决? - 腾讯云开发者社区-腾讯云
2 年前
爱健身的芒果  ·  android 仿 微信带尖角的popwindow_android 仿微信菜单背景带角_Coding_Boy36的博客-CSDN博客
2 年前
豪爽的香槟  ·  在css设置高度height:100%滚动条不出来,设置具体好使 - 简书
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号