I am writing a Swift language interface to the Apache Arrow GLib C bindings.

I am currently successfully putting Swift arrays into GArrays into GTables into 
feather files on disk:

func saveGTableToFeather(_ gTable: UnsafeMutablePointer<GArrowTable>, 
outputPath: String) throws {
   var error: UnsafeMutablePointer<GError>? = nil
   // TODO: How do I turn on compression?
   let properties = garrow_feather_write_properties_new()
   let path = outputPath.cString(using: .utf8)
   let output = garrow_file_output_stream_new(path, 0, &error)
   if let error = error {
       let errorString: String = String(cString: error.pointee.message)
       g_error_free(error)
       g_object_unref(output)
       g_object_unref(properties)
       throw ArrowError.invalidTableCreation(errorString)
   }
   let result: gboolean = garrow_table_write_as_feather(gTable, 
GARROW_OUTPUT_STREAM(output), properties, &error)
   if result == 0 {
       let errorString: String = error != nil ? String(cString: 
error!.pointee.message) : ""
       g_error_free(error)
       g_object_unref(output)
       g_object_unref(properties)
       throw ArrowError.invalidTableCreation(errorString)
   }
   g_object_unref(output)
   g_object_unref(properties)
}

When I run file myData.feather on Ubuntu 18.04, it doesn’t indicate any kind of 
compression, so the files I’m saving may not be compressed at all.

You can see I’ve created a new GArrowFeatherWriteProperties with 
garrow_feather_write_properties_new , but how do I set the compression level? I 
see it is meant to have a compression property based on the docs here ( 
https://arrow.apache.org/docs/c_glib/arrow-glib/GArrowTable.html#GArrowFeatherWriteProperties--compression
 ). When I attempt to set properties.compression (In Swift this is likely 
properties.pointee.compression ), I get a compiler error that it has no such 
property. Do I need to make a cast? Is there any example code of setting the 
compression on a GArrowFeatherWriteProperties ?

Thank you,

Xander

​

Reply via email to