Apache spark apache spark从arraytype列中删除元素

Apache spark apache spark从arraytype列中删除元素,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个包含两列的CSV文件: +-----+--------------------------------------------------+ | c1 | location | +-----+--------------------------------------------------+ | 1 |[1,2,3,4,5,6,7,8]

我有一个包含两列的CSV文件:

+-----+--------------------------------------------------+
|  c1 |    location                                      |
+-----+--------------------------------------------------+
|  1  |[1,2,3,4,5,6,7,8]                                 |
+-----+--------------------------------------------------+
我正在使用Spark加载此CSV文件

DataSet<Row> dataset = spark.read.format("csv").csv(pathOfCsvFile);

您可以创建一个UDF来完成这项工作

假设要删除的元素列表如下所示:

val ys=Seq(1,2,3)
然后,输入数据帧:

+---+------------------------+
|a | b|
+---+------------------------+
|1  |[1, 2, 3, 4, 5, 6, 7, 8]|
+---+------------------------+
您需要从列
b
中删除序列
ys

val filterList=udf((xs:Seq[Int],ys:Seq[Int])=>xs.filterNot(ys.contains()))
然后,在数据帧上调用它,如:

df.withColumn(“location”,filterList($“location”,数组)(b.map(lit:)).show(false)
+---+---------------+
|a |位置|
+---+---------------+
|1  |[4, 5, 6, 7, 8]|
+---+---------------+

我的真实情况是,我有一个坐标列表,我需要删除坐标以简化线条的几何结构。所以我们可以说从[1,2,3]中的位置删除坐标,那么最终输出中的7和8在哪里?是的,结果4,5,6,7,8我想你需要一个自定义项。我尝试编写自定义项,但是我的问题是如何从ArrayTanks类型的列中删除,这非常有用。如果你能用java代码编写这个示例,还有一件事
{
  "c1" : "1" ,
  "location" : {
               [4,5,6,7,8]
             }
}