Yo estaba usando json scala biblioteca para analizar un json desde una unidad local en la chispa de trabajo :

val requestJson=JSON.parseFull(Source.fromFile("c:/data/request.json").mkString)
    val mainJson=requestJson.get.asInstanceOf[Map[String,Any]].get("Request").get.asInstanceOf[Map[String,Any]]
    val currency=mainJson.get("currency").get.asInstanceOf[String]

Pero cuando trato de usar el mismo analizador señalando hdfs ubicación del archivo no funciona:

val requestJson=JSON.parseFull(Source.fromFile("hdfs://url/user/request.json").mkString)

y me da un error:

java.io.FileNotFoundException: hdfs:/localhost/user/request.json (No such file or directory)
  at java.io.FileInputStream.open0(Native Method)
  at java.io.FileInputStream.open(FileInputStream.java:195)
  at java.io.FileInputStream.<init>(FileInputStream.java:138)
  at scala.io.Source$.fromFile(Source.scala:91)
  at scala.io.Source$.fromFile(Source.scala:76)
  at scala.io.Source$.fromFile(Source.scala:54)
  ... 128 elided

¿Cómo puedo usar Json.parseFull biblioteca para obtener los datos de hdfs ubicación del archivo ?

Gracias

  • Usted debe proporcionar la hdfs` lugar como este hdfs://cluster_name/path/to/file' o, simplemente, dar el nombre del directorio como /path/to/file/. Plz probar y que me haga saber que le ans en consecuencia.
  • sí, traté de darle el hdfs camino a la Fuente.fromFile api pero no funciona
  • Podría usted ser capaz de post registro de errores ?
  • java.io.FileNotFoundException: hdfs:/hdfsurl/usuario/solicitud.json (No existe el fichero o directorio) en java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.abierto(FileInputStream.java:195) en java.io.FileInputStream.<init>(FileInputStream.java:138) en la scala.io.Fuente$.fromFile(de Origen.scala:91) en la scala.io.Fuente$.fromFile(de Origen.scala:76) en la scala.io.Fuente$.fromFile(de Origen.scala:54) … 128 elide
InformationsquelleAutor baiduXiu | 2017-01-04

2 Comentarios

  1. 1

    Chispa tiene incorporado un soporte para JSON documentos de análisis, que estará disponible en spark-sql_${scala.version} frasco.

    En Spark 2.0+ :

    import org.apache.spark.sql.SparkSession 
    
    val spark: SparkSession = SparkSession.builder.master("local").getOrCreate
    
    val df = spark.read.format("json").json("json/file/location/in/hdfs")
    
    df.show()

    con df objeto que usted puede hacer todas las ediciones de SQL operaciones de ello y se procesamiento de datos será distribuido entre los nodos, mientras que requestJson
    se computarán en una sola máquina.

    Dependencias Maven

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.0.0</version>
    </dependency>

    Edición: (como por comentario leer el archivo de hdfs)

    val hdfs = org.apache.hadoop.fs.FileSystem.get(
                 new java.net.URI("hdfs://ITS-Hadoop10:9000/"), 
                 new org.apache.hadoop.conf.Configuration()
               )
    val path=new Path("/user/zhc/"+x+"/")
    val t=hdfs.listStatus(path)
    val in =hdfs.open(t(0).getPath)
    val reader = new BufferedReader(new InputStreamReader(in))
    var l=reader.readLine()

    código créditos: de otro MODO
    pregunta

    Dependencias Maven:

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.7.2</version> <!-- you can change this as per your hadoop version -->
    </dependency>
    • el archivo json es sólo unos pocos kbs así que quiero evitar el uso de dataframe en este caso y analizar el json en dirver lugar de todos los trabajadores
    • se puede restringir a los trabajadores a una por el cambio de código como master("local[1]"). Como se ejecuta en local modo que el trabajador y el conductor será en la misma máquina.
    • usted puede utilizar df.collect() para obtener toda la información para el conductor.
    • el trabajo es analizar un pequeño archivo y, a continuación, una más grande de parquet y unir el archivo más grande con el archivo más pequeño ,el más pequeño que el archivo no necesita para ejecutar la distribuye el código que me refería .el maestro se debería ejecutar en todos los núcleos del fishing, ya que tiene que procesar grandes parquet archivo
    • A continuación, tienes que cargar un archivo json utilizando HDFS api como el archivo que se encuentra en hdfs. Está bien cargar los datos y recoger para el conductor. Como el archivo es pequeño se va a crear una sola partición.
    • No estoy seguro si esto es una Chispa que se trate. La ruta de acceso del archivo no es correcto (hdfs necesidades «hdfs://», que claramente es que faltan). También Scala tiene soporte nativo para JSON de análisis, así como el OP lo hace todo con Ddr debe ser capaz de hacer esto.

  2. 1

    Es mucho más fácil en la chispa de la 2.0

    val df = spark.read.json("json/file/location/in/hdfs")
    df.show()
    • genera un mapa de reducir el trabajo de este .para un pequeño json es una exageración y por lo tanto me quería para ejecutar esta con scala

Dejar respuesta

Please enter your comment!
Please enter your name here