我有一个包含两列的CSV文件:
+-----+--------------------------------------------------+
| c1 | location |
+-----+--------------------------------------------------+
| 1 |[1,2,3,4,5,6,7,8] |
+-----+--------------------------------------------------+
我正在使用Spark来使用
加载此CSV文件DataSet<Row> dataset = spark.read.format("csv").csv(pathOfCsvFile);
有没有办法从导入的列位置删除1,2,3
等元素列表,结果是:
{
"c1" : "1" ,
"location" : {
[4,5,6,7,8]
}
}
答案 0 :(得分:0)
您可以创建一个UDF来为您执行此操作。
假设您要删除的元素列表如下:
val ys = Seq(1,2,3)
并输入dataframe:
+---+------------------------+
|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" , array(b.map(lit _) :_* ) )).show(false)
+---+---------------+
|a |location |
+---+---------------+
|1 |[4, 5, 6, 7, 8]|
+---+---------------+