es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener la ruta de Hadoop con la API de Java/Scala en repositorios de código.

Mi necesidad es leer otros formatos: JSON, binario, XML e inferir el esquema dinámicamente dentro de una transformación en Repositorios de Código y utilizando la API de Spark de origen de datos.

Ejemplo:

val df = spark.read.json(<hadoop_path>)

Para eso, necesito un acceso al sistema de archivos de Foundry, que es algo como:

foundry://...@url:port/datasets/ri.foundry.main.dataset.../views/ri.foundry.main.transaction.../startTransactionRid/ri.foundry.main.transaction...

Esto es posible con la API de PySpark (Python):

filesystem = input_transform.filesystem()
hadoop_path = filesystem.hadoop_path

Sin embargo, no encontré una forma adecuada de hacerlo en Java/Scala.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Apache Spark y Palantir Foundry, puedo sugerir el siguiente enfoque para leer otros formatos como JSON, binario y XML, e inferir dinámicamente el esquema dentro de una transformación en Repositorios de Código utilizando la API de origen de datos de Spark:

    1. Utilice la ruta del sistema de archivos de Foundry para acceder a los datos utilizando la API de origen de datos de Spark. La ruta del sistema de archivos de Foundry se ve algo así:
    foundry://...@url:puerto/conjuntos_de_datos/ri.foundry.main.conjunto_de_datos.../vistas/ri.foundry.main.transaccion.../startTransactionRid/ri.foundry.main.transaccion...
    
    1. En la API de PySpark, puede utilizar el siguiente código para obtener el sistema de archivos y la ruta de Hadoop:
    sistema_de_archivos = input_transform.filesystem()
    ruta_de_hadoop = sistema_de_archivos.hadoop_path
    
    1. Para Java/Scala, puede utilizar FileSystemOptions para especificar la ruta del sistema de archivos de Foundry y configurar el sistema de archivos de Hadoop en consecuencia. Aquí hay un ejemplo de código:
    import org.apache.hadoop.fs.{FileSystem, Path}
    import org.apache.spark.sql.SparkSession
    import org.apache.spark.sql.types.StructType
    
    val spark = SparkSession.builder().appName("Leer datos de Foundry").getOrCreate()
    
    val foundryFilePath = "foundry://...@url:puerto/conjuntos_de_datos/ri.foundry.main.conjunto_de_datos.../vistas/ri.foundry.main.transaccion.../startTransactionRid/ri.foundry.main.transaccion..."
    
    val ruta = new Path(foundryFilePath)
    
    val conf = spark.sparkContext.hadoopConfiguration
    conf.set("fs.s3a.access.key", "CLAVE_DE_ACCESO")
    conf.set("fs.s3a.secret.key", "CLAVE_SECRETA")
    conf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
    
    val fs = FileSystem.get(ruta.toUri, conf)
    
    val esquema = Some(new StructType())
    
    val df = spark.read.format("json").schema(esquema).load(fs.open(ruta))
    

    En este código, estamos utilizando FileSystemOptions para establecer las claves de acceso y secreto de S3 y S3AFileSystem como implementación del sistema de archivos. También estamos utilizando spark.read.format("json") para especificar el formato del archivo y fs.open(ruta) para leer los datos de la ruta especificada.

    En general, utilizando la ruta del sistema de archivos de Foundry y la API de origen de datos de Spark, podemos leer otros formatos como JSON, binario y XML e inferir dinámicamente el esquema dentro de una transformación en Repositorios de Código.

Comments are closed.