当前位置: 首页 > 知识库问答 >
问题:

SparkSQL-直接读取拼花地板文件

谷奕
2023-03-14

我正在从Impala迁移到SparkSQL,使用以下代码读取一个表:

my_data = sqlContext.read.parquet('hdfs://my_hdfs_path/my_db.db/my_table')

我如何调用上面的SparkSQL,这样它就可以返回这样的东西:

'select col_A, col_B from my_table'

共有3个答案

洪飞驰
2023-03-14

假设您在HDFS中有拼花地板文件ventas4:

hdfs://localhost:9000/sistgestion/sql/ventas4

在这种情况下,步骤如下:

>

  • SQL上下文:

    val sqlContext = new org.apache.spark.sql.SQLContext(sc)
    

    阅读拼花地板文件

    val ventas=sqlContext.read.parquet("hdfs://localhost:9000/sistgestion/sql/ventas4")
    

    注册一个时态表:

    ventas.registerTempTable("ventas")
    

    执行查询(在这一行中,可以使用toJSON传递JSON格式,也可以使用collect()):

    sqlContext.sql("select * from ventas").toJSON.foreach(println(_))
    
    sqlContext.sql("select * from ventas").collect().foreach(println(_))
    

  • 祁雪峰
    2023-03-14

    无需在Spark DataFrame上创建表格,即可查询JSON、ORC、Parquet和CSV文件。

    //This Spark 2.x code you can do the same on sqlContext as well
    val spark: SparkSession = SparkSession.builder.master("set_the_master").getOrCreate
    
    spark.sql("select col_A, col_B from parquet.`hdfs://my_hdfs_path/my_db.db/my_table`")
       .show()
    
    单于飞鸣
    2023-03-14

    从拼花地板文件创建Dataframe后,您必须将其注册为临时表,以便在其上运行sql查询

    val sqlContext = new org.apache.spark.sql.SQLContext(sc)
    
    val df = sqlContext.read.parquet("src/main/resources/peopleTwo.parquet")
    
    df.printSchema
    
    // after registering as a table you will be able to run sql queries
    df.registerTempTable("people")
    
    sqlContext.sql("select * from people").collect.foreach(println)
    
     类似资料:
    • 则错误如下: AttributeError:“property”对象没有属性“parquet”

    • 我有以Avro格式存储的Kafka主题。我想使用整个主题(在收到时不会更改任何消息)并将其转换为Parket,直接保存在S3上。 我目前正在这样做,但它要求我每次消费一条来自Kafka的消息,并在本地机器上处理,将其转换为拼花文件,一旦整个主题被消费,拼花文件完全写入,关闭写入过程,然后启动S3多部分文件上传。或《Kafka》中的阿夫罗- 我想做的是《Kafka》中的阿夫罗- 注意事项之一是Kaf

    • 使用scala或pyspark读取hadoop中存储的拼花地板文件时,出现错误: 或 导致相同的错误。 错误消息非常清楚必须做什么:无法推断拼花的模式。必须手动指定。;。但是我在哪里可以指定它呢? Spark 2.1.1、Hadoop 2.5、数据帧是在pyspark的帮助下创建的。文件被划分为10个peace。

    • 我很难找到这个问题的答案。假设我为拼花地板编写了一个数据框,并且我使用与相结合来获得一个分区良好的拼花地板文件。请参阅下面: 现在,稍后我想读取拼花文件,所以我这样做: 数据帧是否由分区?换句话说,如果拼花地板文件被分区,火花在将其读入火花数据帧时是否会维护该分区。还是随机分区? 同样,这个答案的“为什么”和“为什么不”也会有所帮助。

    • 我试图利用火花分区。我试图做这样的事情 这里的问题每个分区都会创建大量的镶木地板文件,如果我尝试从根目录读取,则会导致读取缓慢。 为了避免这种情况,我试过 但是,这将创建每个分区中镶木地板文件的数目。现在我的分区大小不同了。因此,理想情况下,我希望每个分区都有单独的合并。然而,这看起来并不容易。我需要访问所有分区合并到一定数量并存储在单独的位置。 我应该如何使用分区来避免写入后出现许多文件?