0

I am developing a Spring Boot Application with H2O 3.20.0.10 and need a summary / metadata of all columns in a frame. While invoking frameSummary() of H2oApi, I get an MalformedJsonException:

Caused by: com.google.gson.stream.MalformedJsonException: JSON forbids NaN and infinities: NaN at line 1 column 23937 path $.frames[0].columns[6].mean
    at com.google.gson.stream.JsonReader.nextDouble(JsonReader.java:912)
    at com.google.gson.Gson$1.read(Gson.java:319)
    at com.google.gson.Gson$1.read(Gson.java:313)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
    at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
    at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
    at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:116)
    at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
    at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
    at water.bindings.H2oApi.frameSummary(H2oApi.java:3718)

Column at position 23937 is of type enum and has therefore no mean value.

Update MWE:

new H2oApi("http://localhost:54321").frameSummary(key);

the response from H2O is something like:

__meta  
        schema_version  3
        schema_name "FramesV3"
        schema_type "Frames"
    _exclude_fields ""
    row_offset  0
    row_count   -1
    column_offset   0
    full_column_count   -1
    column_count    -1
    job null
frames  
    0   
        __meta  
            schema_version  3
            schema_name "FrameV3"
            schema_type "Frame"
        _exclude_fields ""
        frame_id    
            __meta  
                schema_version  3
                schema_name "FrameKeyV3"
                schema_type "Key<Frame>"
            name    "TrainR"
            type    "Key<Frame>"
            URL "/3/Frames/TrainR"
        byte_size   48018
        is_text false
        row_offset  0
        row_count   100
        column_offset   0
        column_count    10
        full_column_count   10
        total_column_count  10
        checksum    5296931134826174000
        rows    1233
        num_columns 10
        default_percentiles […]
        columns 
            0   {…}
            1   {…}
            2   {…}
            3   {…}
            4   {…}
            5   {…}
            6   
                __meta  
                    schema_version  3
                    schema_name "ColV3"
                    schema_type "Vec"
                label   "weekday"
                missing_count   0
                zero_count  176
                positive_infinity_count 0
                negative_infinity_count 0
                mins    […]
                maxs    […]
                mean    "NaN"
                sigma   "NaN"
                type    "enum"
                domain  […]
                domain_cardinality  7
                data    […]
                string_data null
                precision   -1
                histogram_bins  […]
                histogram_base  0
                histogram_stride    1
                percentiles […]
            7   {…}
            8   {…}
            9   {…}
compatible_models   null

Is there a workaround for that?

1 Answers1

0

I was able to fix the problem. Gson usually does not like "NaN" of infinities for primitive values (or the object as well?)

the fix was to set lenient when configuring Gson.

I also created a pull request: https://github.com/h2oai/h2o-3/pull/2962