如何基于scala sparkDataframe中的另一列交换同一列中的值?

n6lpvg4x  于 2021-07-14  发布在  Spark
关注(0)|答案(0)|浏览(259)

我正在处理一个像这样的Dataframe

df.show
+-----+-------------+
|group| groupEncoded|
+-----+-------------+
|    B|(2,[1],[1.0])|
|    C|(2,[0],[1.0])|
|    B|(2,[1],[1.0])|
|    C|(2,[0],[1.0])|
|    A|    (2,[],[])|
|    C|(2,[0],[1.0])|
|    A|    (2,[],[])|

我想交换 groupEncoded 在a和b之间。
现在有一个 groupEncoded = (2,[],[]) b有 groupEncoded = (2,[1],[1.0]) . 我想把这两个换成table的样子

+-----+-------------+
|group| groupEncoded|
+-----+-------------+
|    B|    (2,[],[])|
|    C|(2,[0],[1.0])|
|    B|    (2,[],[])|
|    C|(2,[0],[1.0])|
|    A|(2,[1],[1.0])|
|    C|(2,[0],[1.0])|
|    A|(2,[1],[1.0])|

我尝试了以下方法,但出现了这个错误 java.lang.RuntimeException: Unsupported literal type class org.apache.spark.ml.linalg.SparseVector (2,[],[]) ```
val groupEncodedA = df.filter($"group" === "A").select($"groupEncoded").distinct.collect()(0)(0)
val groupEncodedB = df.filter($"group" === "B").select($"groupEncoded").distinct.collect()(0)(0)
val dfSwapped = df.withColumn(
"groupEncoded",
when($"group" === "A", groupEncodedB).otherwise(
when($"group" === "B", groupEncodedA).otherwise($"groupEncoded")))

在上述代码中, `groupEncodedA` 有类型 `Any` .
最好的办法是什么?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题