From 4e00c26f586d1a078b4c8d89072aadb0e87f43c0 Mon Sep 17 00:00:00 2001 From: huangzhaowei Date: Mon, 6 Jan 2025 16:00:00 +0800 Subject: [PATCH 1/2] fix(java): replace org.json with gson to resolve the jar conflict with spark 3.5.1 --- java/core/pom.xml | 11 ++- .../com/lancedb/lance/FragmentMetadata.java | 82 ++++++++++++------- java/pom.xml | 6 +- 3 files changed, 65 insertions(+), 34 deletions(-) diff --git a/java/core/pom.xml b/java/core/pom.xml index 142f218726..028b936471 100644 --- a/java/core/pom.xml +++ b/java/core/pom.xml @@ -41,8 +41,9 @@ commons-lang3 - org.json - json + com.google.code.gson + gson + compile org.questdb @@ -53,6 +54,12 @@ junit-jupiter test + + org.apache.hadoop + hadoop-client-runtime + 3.4.0 + compile + diff --git a/java/core/src/main/java/com/lancedb/lance/FragmentMetadata.java b/java/core/src/main/java/com/lancedb/lance/FragmentMetadata.java index c45bb0f99b..33644d9f3f 100644 --- a/java/core/src/main/java/com/lancedb/lance/FragmentMetadata.java +++ b/java/core/src/main/java/com/lancedb/lance/FragmentMetadata.java @@ -13,10 +13,13 @@ */ package com.lancedb.lance; +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.annotations.SerializedName; import org.apache.arrow.util.Preconditions; import org.apache.commons.lang3.builder.ToStringBuilder; -import org.json.JSONArray; -import org.json.JSONObject; import java.io.Serializable; import java.util.ArrayList; @@ -25,8 +28,6 @@ /** Metadata of a Fragment in the dataset. Matching to lance Fragment. */ public class FragmentMetadata implements Serializable { private static final long serialVersionUID = -5886811251944130460L; - private static final String ID_KEY = "id"; - private static final String PHYSICAL_ROWS_KEY = "physical_rows"; private final String jsonMetadata; private final int id; private final long physicalRows; @@ -66,17 +67,13 @@ public String toString() { */ public static FragmentMetadata fromJson(String jsonMetadata) { Preconditions.checkNotNull(jsonMetadata); - JSONObject metadata = new JSONObject(jsonMetadata); - if (!metadata.has(ID_KEY) || !metadata.has(PHYSICAL_ROWS_KEY)) { - throw new IllegalArgumentException( - String.format( - "Fragment metadata must have {} and {} but is {}", - ID_KEY, - PHYSICAL_ROWS_KEY, - jsonMetadata)); + Gson gson = new Gson(); + try { + Fragment fragment = gson.fromJson(jsonMetadata, Fragment.class); + return new FragmentMetadata(jsonMetadata, fragment.getId(), fragment.getPhysicalRows()); + } catch (Exception e) { + throw new IllegalArgumentException(e); } - return new FragmentMetadata( - jsonMetadata, metadata.getInt(ID_KEY), metadata.getLong(PHYSICAL_ROWS_KEY)); } /** @@ -87,22 +84,49 @@ public static FragmentMetadata fromJson(String jsonMetadata) { */ public static List fromJsonArray(String jsonMetadata) { Preconditions.checkNotNull(jsonMetadata); - JSONArray metadatas = new JSONArray(jsonMetadata); - List fragmentMetadataList = new ArrayList<>(); - for (Object object : metadatas) { - JSONObject metadata = (JSONObject) object; - if (!metadata.has(ID_KEY) || !metadata.has(PHYSICAL_ROWS_KEY)) { - throw new IllegalArgumentException( - String.format( - "Fragment metadata must have {} and {} but is {}", - ID_KEY, - PHYSICAL_ROWS_KEY, - jsonMetadata)); + Gson gson = new Gson(); + JsonParser parser = new JsonParser(); + try { + JsonArray fragments = parser.parse(jsonMetadata).getAsJsonArray(); + List fragmentMetadataList = new ArrayList<>(); + for (JsonElement fragmentE : fragments) { + Fragment fragment = gson.fromJson(fragmentE, Fragment.class); + fragmentMetadataList.add( + new FragmentMetadata( + fragmentE.toString(), fragment.getId(), fragment.getPhysicalRows())); } - fragmentMetadataList.add( - new FragmentMetadata( - metadata.toString(), metadata.getInt(ID_KEY), metadata.getLong(PHYSICAL_ROWS_KEY))); + return fragmentMetadataList; + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + } + + public static class Fragment { + @SerializedName("id") + private int id; + + @SerializedName("physical_rows") + private long physicalRows; + + public Fragment(int id, long physicalRows) { + this.id = id; + this.physicalRows = physicalRows; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public long getPhysicalRows() { + return physicalRows; + } + + public void setPhysicalRows(long physicalRows) { + this.physicalRows = physicalRows; } - return fragmentMetadataList; } } diff --git a/java/pom.xml b/java/pom.xml index c6877414e9..0700f824b5 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -99,9 +99,9 @@ 5.10.1 - org.json - json - 20231013 + com.google.code.gson + gson + 2.2.4 org.apache.commons From 703d306db94c8f88f9c8b20b3717088d137a2c73 Mon Sep 17 00:00:00 2001 From: huangzhaowei Date: Mon, 6 Jan 2025 17:36:43 +0800 Subject: [PATCH 2/2] remove useless import --- java/core/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/java/core/pom.xml b/java/core/pom.xml index 028b936471..5694b0485c 100644 --- a/java/core/pom.xml +++ b/java/core/pom.xml @@ -54,12 +54,6 @@ junit-jupiter test - - org.apache.hadoop - hadoop-client-runtime - 3.4.0 - compile -