我正在从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'
答案 0 :(得分:25)
从镶木地板文件创建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)
答案 1 :(得分:16)
可以在查询JSON,ORC,Parquet和CSV文件,而无需在Spark DataFrame上创建表格。
//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()
答案 2 :(得分:1)
假设您在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(_))
答案 3 :(得分:0)
在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)
}