我正在嘗試爲Java Spark-Sql應用程序編寫一些測試。我需要測試一個操作來重新命名列,並且遇到一些困難,比較重命名列的實際值和我的預期值。經過一番實驗,我能夠寫出以下兩個測試來演示這個問題:如何在重命名後檢查火花列的相等性
首先,作爲一個完整性檢查,我試過了(df是一個spark sql DataFrame
,通過從json文件讀取一些示例數據我正在測試):
@Test
public void testColumnEquality() throws Exception {
Column val1 = df.col("col2");
Column val2 = df.col("col2");
Assert.assertEquals(val1, val2);
}
正如人們所期望的那樣通過。然後我嘗試這樣的:
@Test
public void testReanmeColumnEquality() throws Exception {
Column val1 = df.col("col2").as("col2");
Column val2 = df.col("col2").as("col2");
Assert.assertEquals(val1, val2);
}
其失敗,出現錯誤java.lang.AssertionError: expected:<col2 AS col2#4L> but was:<col2 AS col2#5L>
在Scala代碼周圍挖(充分披露 - 我知道很少斯卡拉),它看起來像這樣具有與NamedExpression
唯一的ID做。
有什麼辦法可以明智地檢查這兩列是否代表具有相同別名的相同操作?
(我在火花1.6工作,並會像理想該版本線的解決方案,但如果這是固定的2.0也將是不錯的信息。)
謝謝你。
你可以在Scala中做到嗎? – Wilmerton