gpt4 book ai didi

scala - 数据框中 ArrayType 列之间的差异

转载 作者:行者123 更新时间:2023-12-01 13:39:57 26 4
gpt4 key购买 nike

我有包含 2 个 ArrayType 列的数据框。我想找出列之间的区别。 column1 将始终具有值,而 column2 可能具有空数组。我创建了以下 udf,但它不起作用

df.show() 给出如下记录

示例数据:

["Test", "Test1","Test3", "Test2"], ["Test", "Test1"]

代码:

sc.udf.register("diff", (value: Column,value1: Column)=>{ 
value.asInstanceOf[Seq[String]].diff(value1.asInstanceOf[Seq[String]])
})

输出:

["Test2","Test3"]

Spark 版本 1.4.1任何帮助将不胜感激。

最佳答案

column1 will always have values while column2 may have empty array.

your comment : it gives all values of value – undefined_variable

例子1:

让我们看看这样的小例子......

   val A = Seq(1,1)

A: Seq[Int] = List(1, 1)

val B = Seq.empty

B: Seq[Nothing] = List()

A diff B

res0: Seq[Int] = List(1, 1)

如果您执行 collection.SeqLike.diff,那么您将获得 A 值,如示例所示。根据 scala,这是非常有效的情况,因为你告诉你总是得到 value 这是 seq。

另外,反向大小写是这样的...

 B diff A

res1: Seq[Nothing] = List()

如果您也使用 Spark udf 执行上述操作,则会出现相同的结果。

编辑:(如果在您修改示例时一个数组不为空)

例子2:

 val p = Seq("Test", "Test1","Test3", "Test2")

p: Seq[String] = List(Test, Test1, Test3, Test2)

val q = Seq("Test", "Test1")

q: Seq[String] = List(Test, Test1)

p diff q

res2: Seq[String] = List(Test3, Test2)

这是您示例中给出的预期输出。

相反的情况:我认为这就是你所得到的,而不是你所期望的。

q diff p

res3: Seq[String] = List()

关于scala - 数据框中 ArrayType 列之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41159893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com