Search code examples
rpalantir-foundryfoundry-code-repositories

How to write and rds file in foundry code repository


I would like to know if there's an option to write an rds file to foundry file system from code repository. I know it's possible from code workbook but I couldn't find a way applying the approach in code repository.

In this example, I'm storing the lower_case object as foundry data table but I would rather store it as .rds file.

from transforms.api import transform, Output

@transform(
    output=Output("/Global/Foundry Training/Examples/PySpark & Python Transforms/Transforms Execute R Code/lower")
)
def my_compute_function(ctx, output):
    from rpy2.robjects.packages import importr
    from rpy2.robjects import pandas2ri
    from rpy2.robjects.conversion import localconverter
    import rpy2.robjects as ro

    base = importr('base')
    # Calling functions example
    lower_case = base.tolower("LOWER")[0]

**    #What I need to to to write lower_case object as RDS file to foundry file system
**
    output.write_dataframe(ctx.spark_session.createDataFrame([[lower_case]], 'lower:string'))

Thanks!


Solution

  • Thanks for your help. This is the adjusted code to write an RDS object to foundry filesystem using rpy2:

    from transforms.api import transform, Output
    
    @transform(
    output=Output("/Global/Foundry Training/Examples/PySpark & Python Transforms/Transforms Execute R Code/lower.rds")
    )
    
    def my_compute_function(ctx, output):
        from rpy2.robjects.packages import importr
        import rpy2.robjects as ro
    
        base = importr('base')
        saveRDS = ro.r["saveRDS"]
        lower_case = base.tolower("LOWER")[0]
    
        with output.filesystem().open('lower.rds', 'wb') as f:
            saveRDS(lower_case, f.name)