[英]SparkSQL - Read parquet file directly
我正在從 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'
從 parquet 文件創建 Dataframe 后,您必須將其注冊為臨時表以在其上運行sql queries
。
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)
無需在 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()
假設您在 HDFS 中有 parquet 文件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(_))
在intellij中使用以下代碼:
def groupPlaylistIds(): Unit ={
Logger.getLogger("org").setLevel(Level.ERROR)
val spark = SparkSession.builder.appName("FollowCount")
.master("local[*]")
.getOrCreate()
val sc = spark.sqlContext
val d = sc.read.format("parquet").load("/Users/CCC/Downloads/pq/file1.parquet")
d.printSchema()
val d1 = d.select("col1").filter(x => x!='-')
val d2 = d1.filter(col("col1").startsWith("searchcriteria"));
d2.groupBy("col1").count().sort(col("count").desc).show(100, false)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.