2016-12-21 8 views

ответ

4

После создания Dataframe из паркетного файла вам необходимо зарегистрировать его в качестве таблицы temp для запуска 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) 
+0

Собирается ли сбор (или хорошая идея)? Потому что, если данные большие, мы не хотим собирать все драйверу? – Edamame

+1

его просто пример использования sql. Это зависит от вас, как вы хотите его использовать. вы можете изменить запрос или сделать .take() также получить требуемые данные по драйверу –

5

Мы можно запустить SQL непосредственно на файлы, такие как JSON, ORC, паркета и 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() 
+0

Я вижу эту ошибку «Файл не найден. Возможно, базовые файлы были обновлены. Вы можете явно аннулировать кеш в Spark by выполнение команды «REFRESH TABLE tableName» в SQL или путем воссоздания используемого набора данных/DataFrame ». Как это разрешить? – Passionate

+0

Не помогает, если я делаю spark.sqlContext(). SetConf ("spark.sql.parquet.cacheMetadata", "false"); – Passionate

+1

Работает! Просто замените 'hdfs: // my_hdfs_path/my_db.db/my_table' путь к файлу. :) – Cherry

 Смежные вопросы

  • Нет связанных вопросов^_^