2016-02-03 5 views
2

Я пытаюсь создать несколько скриптов для pyspark, используя pycharm. Хотя я нашел несколько объяснений о том, как их подключить (например, How to link PyCharm with PySpark?), не все работает правильно.Работает на pyspark из pycharm

То, что я в основном установить переменные среды правильно:

echo $PYTHONPATH 
:/usr/local/spark/python:/usr/local/spark/python/lib/py4j-0.9-src.zip 
echo $SPARK_HOME 
/usr/local/spark 

и в коде у меня есть:

appName = "demo1" 
master = "local" 
conf = SparkConf().setAppName(appName).setMaster(master) 
sc = SparkContext(conf=conf) 
sqlContext = SQLContext(sc) 

Проблема заключается в том, что многие функции агрегации dataframe появляются как ошибки. Например, у меня есть следующие строки:

from pyspark.sql import functions as agg_funcs 
maxTimeStamp = base_df.agg(agg_funcs.max(base_df.time)).collect() 

Еще PyCharm претензии: Не удается найти ссылку «Макс» в functions.py Похожая apepars ошибок для большинства агрегатных функций (например, колонка, счетчик)

Как бы Я это исправить?

+0

Это по-прежнему актуально в версии 1.6.1 –

+0

По-прежнему верно с последними PySpark и последними PyCharm! См. Проблему, связанную ниже:/ – Rmatt

ответ

1

Это связано с ограничением анализа python в pycharm. Так как pyspark генерирует часть своей функции «на лету». Я действительно открыл проблему с pycharm (https://youtrack.jetbrains.com/issue/PY-20200). который предоставляет некоторые решения, которые в основном для написания кода интерфейса вручную.

Update:

Если вы посмотрите на this thread вы можете увидеть некоторые улучшения в этой теме. This имеет рабочий интерфейс для большинства вещей, а here - это дополнительная информация об этом.

0

Письменные скрипты в PyCharm отличные, но для их запуска я советую вам использовать команду spark-submit прямо с консоли, чтобы выполнить их.

Если вы действительно хотите запустить их прямо из PyCharm, существует отличный проект github под названием findspark, который позволяет вам делать то, о чем вы просите.

Установите библиотеку и просто добавить в начало вашего кода

import findspark 
findspark.init() 

Остальная часть кода проходит чуть ниже, что и findspark будет делать все работы для вас!

+1

Проблема заключается не в написании кода, а в самой IDE, которая не распознает функции. –

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