Zeppelin - не удается запросить с помощью %sql таблицу, которую я зарегистрировал в pyspark

Я новичок в spark/zeppelin, и я хотел выполнить простое упражнение, в котором я преобразую CSV-файл из pandas в фрейм данных Spark, а затем зарегистрирую таблицу, чтобы запросить ее с помощью sql и визуализировать ее с помощью Zeppelin.

Но я, кажется, терплю неудачу в последнем шаге.

Я использую Спарк 1.6.1

Вот мой код:

%pyspark
spark_clean_df.registerTempTable("table1")
print spark_clean_df.dtypes
print sqlContext.sql("select count(*) from table1").collect()

Вот результат:

[('id', 'bigint'), ('name', 'string'), ('host_id', 'bigint'), ('host_name', 'string'), ('neighbourhood', 'string'), ('latitude', 'double'), ('longitude', 'double'), ('room_type', 'string'), ('price', 'bigint'), ('minimum_nights', 'bigint'), ('number_of_reviews', 'bigint'), ('last_review', 'string'), ('reviews_per_month', 'double'), ('calculated_host_listings_count', 'bigint'), ('availability_365', 'bigint')]
[Row(_c0=4961)]

Но когда я пытаюсь использовать %sql, я получаю эту ошибку:

%sql
select * from table1

Table not found: table1; line 1 pos 14
set zeppelin.spark.sql.stacktrace = true to see full stacktrace

Любая помощь будет оценена по достоинству - я даже не знаю, где найти эту трассировку стека и как она может мне помочь.

Спасибо :)


person StefanK    schedule 01.06.2016    source источник
comment
Эта ссылка была особенно полезна при решении этой проблемы: spark.apache.org /docs/latest/sql-programming-guide.html   -  person StefanK    schedule 09.06.2016


Ответы (4)


Zeppelin может создавать разные контексты для разных интерпретаторов. Возможно, если вы выполнили некоторый код с помощью интерпретаторов %spark и некоторый код с помощью интерпретаторов %pyspark, ваш Zeppelin может иметь два контекста. И когда вы используете %sql, он ищет в другом контексте, а не в %pyspark. Попробуйте перезапустить Zeppelin и выполнить код %pyspark в качестве первого оператора, а затем %sql в качестве второго.

Если вы перейдете на вкладку «Интерпретаторы», вы можете добавить туда zeppelin.spark.sql.stacktrace. И после перезапуска Zeppelin вы увидите полную трассировку стека в том месте, где у вас сейчас «Таблица не найдена».

На самом деле это, вероятно, ответ на ваш вопрос ">При регистрации таблицы с помощью интерпретатора %pyspark в Zeppelin я не могу получить доступ к таблице в %sql

Стараться сделать

    %pyspark
    sqlContext = sqlc

как первые две строки

person Andrei Stankevich    schedule 07.06.2016
comment
Привет, спасибо за предложение, но я думаю, что это не то, что я искал. Я дополнительно проверил, в чем может быть проблема, и нашел это решение: сначала мне нужно создать схему новой таблицы, создать пустую таблицу на основе схемы и проанализировать столбец фрейма данных за столбцом и передать эти значения из data.frame в таблицу sql, прежде чем я ее зарегистрирую. В противном случае то, что я регистрирую, пусто. Довольно раздражает и не очень удобен в использовании ... Что мне показалось проще, так это визуализировать данные с помощью matplotlib, а не регистрировать таблицу как sql для запроса и использования визуализаций Zeppelins. - person StefanK; 09.06.2016

также относится к различным контекстам, созданным spark, проверьте следующий параметр в интерпретаторе spark

zeppelin.spark.useHiveContext = false

установите для параметра значение «ложь»

person cipri.l    schedule 31.10.2016


Правильный синтаксис:

sqlContext.registerDataFrameAsTable(spark_clean_df, 'table1')
sqlContext.sql(select * from table1 where ...)
person jk46820    schedule 26.08.2016