Quiero crear una sección de la tabla usando mi Chispa dataframe del esquema. ¿Cómo puedo hacer eso?

Para las columnas fijas, puedo usar:

val CreateTable_query = "Create Table my table(a string, b string, c double)"
sparksession.sql(CreateTable_query) 

Pero tengo muchas columnas en mi dataframe, por lo que hay un camino para generar automáticamente dicha consulta?

Posibles duplicados de Hadoop Hive no se puede mover el origen hasta el de destino
Crear HiveContext y, a continuación, ejecute : val CreateTable_query = hiveContext.sql("Create Table myTable as select * from mytempTable") que Esto va a resolver el problema

OriginalEl autor lserlohn | 2017-02-15

3 Comentarios

  1. 5

    Asumiendo que usted está utilizando Chispa 2.1.0 o posterior y my_DF es su dataframe,

    //get the schema split as string with comma-separated field-datatype pairs
    StructType my_schema = my_DF.schema();
    StructField[] fields = my_schema.fields();
    String fieldStr = "";
    for (StructField f : fields) {
    fieldStr += f.name() + " " + f.dataType().typeName() + ",";
    }
    
    //drop the table if already created
    spark.sql("drop table if exists my_table");
    //create the table using the dataframe schema
    spark.sql("create table my_table(" + fieldStr.subString(0,fieldStr.length()-1)+
    ") row format delimited fields terminated by '|' location '/my/hdfs/location'");
        //write the dataframe data to the hdfs location for the created Hive table
        my_DF.write()
        .format("com.databricks.spark.csv")
        .option("delimiter","|")
        .mode("overwrite")
        .save("/my/hdfs/location");

    El otro utilizando el método de la tabla temporal

    my_DF.createOrReplaceTempView("my_temp_table");
    spark.sql("drop table if exists my_table");
    spark.sql("create table my_table as select * from my_temp_table");
    ¿por qué necesitamos para crear tablas temporales? ¿hay algún beneficio de más de my_DF.write.saveAsTable(...)?
    stackoverflow.com/questions/30664008/… TL;DR saveastable no crear una sección de tabla compatibles. Pregunta por colmena tabla específicamente para…

    OriginalEl autor somnathchakrabarti

  2. 6

    Como por su pregunta parece que desea crear una tabla en la colmena el uso de sus datos-marco del esquema. Pero como dicen que tiene muchas columnas en que los datos de fotograma así que hay dos opciones

    • 1 es crear directa de la colmena tabla comedero de datos-marco.
    • 2º es tomar esquema de este tipo de datos-marco y crear una tabla en la colmena.

    Considerar este código:

    package hive.example
    
    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    import org.apache.spark.sql.SQLContext
    import org.apache.spark.sql.Row
    import org.apache.spark.sql.SparkSession
    
    object checkDFSchema extends App {
      val cc = new SparkConf;
      val sc = new SparkContext(cc)
      val sparkSession = SparkSession.builder().enableHiveSupport().getOrCreate()
      //First option for creating hive table through dataframe 
      val DF = sparkSession.sql("select * from salary")
      DF.createOrReplaceTempView("tempTable")
      sparkSession.sql("Create table yourtable as select * form tempTable")
      //Second option for creating hive table from schema
      val oldDFF = sparkSession.sql("select * from salary")
      //Generate the schema out of dataframe  
      val schema = oldDFF.schema
      //Generate RDD of you data 
      val rowRDD = sc.parallelize(Seq(Row(100, "a", 123)))
      //Creating new DF from data and schema 
      val newDFwithSchema = sparkSession.createDataFrame(rowRDD, schema)
      newDFwithSchema.createOrReplaceTempView("tempTable")
      sparkSession.sql("create table FinalTable AS select * from tempTable")
    }
    temp vista? Esta parece ser la creación de una tabla temporal – no en hive .. ? Por favor, muestre que la tabla se crearon, en realidad de la colmena – por ejemplo, en el que la colmena de la base de datos
    Esta «Crear tabla yourtable como select * from tempTable» comando crear una tabla en la colmena con «yourtable» como nombre de la tabla en la colmena db.. aquí no he mencionado ningún nombre de base de manera que su voluntad de crear en la base de datos predeterminada.
    Yo había hecho algunas investigaciones adicionales: y parece que su enfoque de ser la correcta. La razón de mi escepticismo es: no es trabajo para mí. Voy a tener que crear una pregunta acerca de cómo se entremezclan en-memoria (temp) y la colmena tablas

    OriginalEl autor Nilesh Shinde

  3. 0

    Aquí es PySpark versión para crear la Colmena de la tabla de parqué archivo. Usted puede haber generado Parquet archivos mediante inferirse esquema y ahora quiere empujar definición de la Colmena metastore. También puede pulsar la definición del sistema como AWS Pegamento o AWS Athena y no sólo a la Colmena metastore. Aquí estoy usando chispa.sql empuje/crear tabla permanente.

     # Location where my parquet files are present.
     df = spark.read.parquet("s3://my-location/data/")
    
        cols = df.dtypes
        buf = []
        buf.append('CREATE EXTERNAL TABLE test123 (')
        keyanddatatypes =  df.dtypes
        sizeof = len(df.dtypes)
        print ("size----------",sizeof)
        count=1;
        for eachvalue in keyanddatatypes:
            print count,sizeof,eachvalue
            if count == sizeof:
                total = str(eachvalue[0])+str(' ')+str(eachvalue[1])
            else:
                total = str(eachvalue[0]) + str(' ') + str(eachvalue[1]) + str(',')
            buf.append(total)
            count = count + 1
    
        buf.append(' )')
        buf.append(' STORED as parquet ')
        buf.append("LOCATION")
        buf.append("'")
        buf.append('s3://my-location/data/')
        buf.append("'")
        buf.append("'")
        ##partition by pt
        tabledef = ''.join(buf)
    
        print "---------print definition ---------"
        print tabledef
        ## create a table using spark.sql. Assuming you are using spark 2.1+
        spark.sql(tabledef);

    OriginalEl autor kartik

Dejar respuesta

Please enter your comment!
Please enter your name here