Я не могу выполнить DataFrame.take (n) на PySpark в ноутбуках Jupyter. Почему? - PullRequest
1 голос
/ 10 февраля 2020

Примечание: не все DataFrame, а указанные c (см. Код ниже)

Я могу начать сеанс Spark с jupyter. Я даже могу создать DataFrame, используя sqlContext.createDataFrame, но всякий раз, когда я пытаюсь выполнить операцию над DataFrame, такую ​​как .take или .head, она завершается неудачей, и я получаю ошибку, подобную этой:

Py4JJavaError: An error occurred while calling o212.collectToPython.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 5.0 failed 1 times, most recent failure: Lost task 0.0 in stage 5.0 (TID 5, localhost, executor driver): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
  File "C:\Users\khnajm\Spark\spark-2.4.4-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\worker.py", line 377, in main
  File "C:\Users\khnajm\Spark\spark-2.4.4-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\worker.py", line 372, in process
  File "C:\Users\khnajm\Spark\spark-2.4.4-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\serializers.py", line 393, in dump_stream

Мои переменные окружения JAVA_HOME, SPARK_HOME, HADOOP_HOME и PATH установлены правильно. Я также скачал winutils.exe и сохранил в %SPARK_HOME%\bin

Я использую jdk1.8.0_231 и spark-2.4.4-bin-hadoop2.7 с winutils для hadoop2.7. Я попытался установить PYSPARK_PYTHON, PYSPARK_DRIVER_PYTHON и PYSPARK_DRIVER_PYTHON_OPTS, но, похоже, они ничего не изменили.

Я могу запустить .take на более простом DataFrame, но когда я его запускаю на wordsDataFrame ниже он завершается ошибкой, несмотря на то, что имеет тип DataFrame.

#Tokenize the text in the text column
tokenizer = Tokenizer(inputCol="SMS", outputCol="words")
wordsDataFrame = tokenizer.transform(data_df)
#remove 20 most occuring documents, documents with non numeric characters, and documents with <= 3 characters
cv_tmp = CountVectorizer(inputCol="words", outputCol="tmp_vectors")
cv_tmp_model = cv_tmp.fit(wordsDataFrame)
...