我正在从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'
假设您在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(_))
无需在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()
从拼花地板文件创建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。
我很难找到这个问题的答案。假设我为拼花地板编写了一个数据框,并且我使用与相结合来获得一个分区良好的拼花地板文件。请参阅下面: 现在,稍后我想读取拼花文件,所以我这样做: 数据帧是否由分区?换句话说,如果拼花地板文件被分区,火花在将其读入火花数据帧时是否会维护该分区。还是随机分区? 同样,这个答案的“为什么”和“为什么不”也会有所帮助。
我试图利用火花分区。我试图做这样的事情 这里的问题每个分区都会创建大量的镶木地板文件,如果我尝试从根目录读取,则会导致读取缓慢。 为了避免这种情况,我试过 但是,这将创建每个分区中镶木地板文件的数目。现在我的分区大小不同了。因此,理想情况下,我希望每个分区都有单独的合并。然而,这看起来并不容易。我需要访问所有分区合并到一定数量并存储在单独的位置。 我应该如何使用分区来避免写入后出现许多文件?