arrays - Spark:从 Scala 中的嵌套数组中删除第一个数组
问题描述
我有一个包含 2 列的 DataFrame。我想删除每条记录中嵌套数组的第一个数组。示例:-我有一个像这样的 DF
+---+-------+--------+-----------+-------------+
|id |arrayField |
+---+------------------------------------------+
|1 |[[Akash,Kunal],[Sonu,Monu],[Ravi,Kishan]] |
|2 |[[Kunal, Mrinal],[Priya,Diya]] |
|3 |[[Adi,Sadi]] |
+---+-------+---------+----------+-------------+
我想要这样的输出:-
+---+-------+------+------+-------+
|id |arrayField |
+---+-----------------------------+
|1 |[[Sonu,Monu],[Ravi,Kishan]] |
|2 |[[Priya,Diya]] |
|3 | null |
+---+-------+------+------+-------+
解决方案
从Spark-2.4使用slice
函数。
Example:
df.show(10,false)
/*
+------------------------+
|arrayField |
+------------------------+
|[[A, k], [s, m], [R, k]]|
|[[k, M], [c, z]] |
|[[A, b]] |
+------------------------+
*/
import org.apache.spark.sql.functions._
df.withColumn("sliced",expr("slice(arrayField,2,size(arrayField))")).
withColumn("arrayField",when(size(col("sliced"))==0,lit(null)).otherwise(col("sliced"))).
drop("sliced").
show()
/*
+----------------+
| arrayField|
+----------------+
|[[s, m], [R, k]]|
| [[c, z]]|
| null|
+----------------+
*/
推荐阅读
- c# - 如何通过单击按钮在 Windows 窗体应用程序中停止执行操作?
- scala - 面临 sbt 依赖的问题
- javascript - 如何从脚本中的 ID 转换为调用类?
- javascript - 自定义组件中的@input 事件
- mysql - 如何创建触发器以删除几乎重复的 lat 值
- firebase - 我可以将firebase用于文本短信,例如短信营销而不是身份验证
- javascript - Firebase 数据库查询打印数据库信息,而不是数据
- javascript - 如何向我的网站添加加载动画?
- postgresql - 如何提交 PostgreSQL 中处于空闲状态的事务?
- swift - 如何在 UIView 中为表格视图标题部分绘制自定义形状?