This is an automated email from the ASF dual-hosted git repository.
JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new ed8ecdc231 [spark] Convert EqualNullSafe with NaN to IsNaN in
SparkFilterConverter (#10826)
ed8ecdc231 is described below
commit ed8ecdc23177606a57d7d21a81ee12b4512038f0
Author: chenjian2664 <[email protected]>
AuthorDate: Tue Oct 27 14:16:32 2026 +0800
[spark] Convert EqualNullSafe with NaN to IsNaN in SparkFilterConverter
(#10826)
---
.../org/apache/paimon/spark/SparkFilterConverter.java | 2 ++
.../apache/paimon/spark/SparkFilterConverterTest.java | 17 +++++++++++++++++
2 files changed, 19 insertions(+)
diff --git
a/paimon-spark/paimon-spark-common/src/main/java/org/apache/paimon/spark/SparkFilterConverter.java
b/paimon-spark/paimon-spark-common/src/main/java/org/apache/paimon/spark/SparkFilterConverter.java
index 31e4c8aec9..8c1a925285 100644
---
a/paimon-spark/paimon-spark-common/src/main/java/org/apache/paimon/spark/SparkFilterConverter.java
+++
b/paimon-spark/paimon-spark-common/src/main/java/org/apache/paimon/spark/SparkFilterConverter.java
@@ -118,6 +118,8 @@ public class SparkFilterConverter {
int index = fieldIndex(eq.attribute());
if (eq.value() == null) {
return builder.isNull(index);
+ } else if (isNaN(eq.value())) {
+ return builder.isNaN(index);
} else {
Object literal = convertLiteral(index, eq.value());
return builder.equal(index, literal);
diff --git
a/paimon-spark/paimon-spark-ut/src/test/java/org/apache/paimon/spark/SparkFilterConverterTest.java
b/paimon-spark/paimon-spark-ut/src/test/java/org/apache/paimon/spark/SparkFilterConverterTest.java
index 2e5cec362e..674d9baee6 100644
---
a/paimon-spark/paimon-spark-ut/src/test/java/org/apache/paimon/spark/SparkFilterConverterTest.java
+++
b/paimon-spark/paimon-spark-ut/src/test/java/org/apache/paimon/spark/SparkFilterConverterTest.java
@@ -263,6 +263,23 @@ public class SparkFilterConverterTest {
assertThat(converter.convert(eqFloat)).isEqualTo(builder.equal(0,
1.0f));
}
+ @Test
+ public void testEqualNullSafeNaN() {
+ RowType rowType =
+ new RowType(
+ Arrays.asList(
+ new DataField(0, "f", new FloatType()),
+ new DataField(1, "d", new DoubleType())));
+ SparkFilterConverter converter = new SparkFilterConverter(rowType);
+ PredicateBuilder builder = new PredicateBuilder(rowType);
+
+ EqualNullSafe eqNaNFloat = EqualNullSafe.apply("f", Float.NaN);
+ assertThat(converter.convert(eqNaNFloat)).isEqualTo(builder.isNaN(0));
+
+ EqualNullSafe eqNaNDouble = EqualNullSafe.apply("d", Double.NaN);
+ assertThat(converter.convert(eqNaNDouble)).isEqualTo(builder.isNaN(1));
+ }
+
@Test
public void testIgnoreFailure() {
List<DataField> dataFields = new ArrayList<>();