使用pyspark库时,出现以下错误的原因是什么:Traceback (most recent call last): File "warn_first.py", line 435, in <module> fluence_data_history =spark_sql_test(fluence_sql) File "warn_first.py", line 347, in spark_sql_test sc = SparkContext(conf=conf) File "/data13/yarn/nm2/usercache/target_hive2ck/appcache/application_1683620905143_2728366/container_e4080_1683620905143_2728366_06_000001/pyspark.zip/pyspark/context.py", line 118, in init File "/data13/yarn/nm2/usercache/target_hive2ck/appcache/application_1683620905143_2728366/container_e4080_1683620905143_2728366_06_000001/pyspark.zip/pyspark/context.py", line 180, in _do_init File "/data13/yarn/nm2/usercache/target_hive2ck/appcache/application_1683620905143_2728366/container_e4080_1683620905143_2728366_06_000001/pyspark.zip/pyspark/context.py", line 288, in _initialize_context File "/data13/yarn/nm2/usercache/target_hive2ck/appcache/application_1683620905143_2728366/container_e4080_1683620905143_2728366_06_000001/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1525, in call File "/data13/yarn/nm2/usercache/target_hive2ck/appcache/application_1683620905143_2728366/container_e4080_1683620905143_2728366_06_000001/pyspark.zip/pyspark/sql/utils.py", line 63, in deco File "/data13/yarn/nm2/usercache/target_hive2ck/appcache/application_1683620905143_2728366/container_e4080_1683620905143_2728366_06_000001/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext. : java.lang.IllegalStateException: Promise already completed.
时间: 2023-08-11 09:08:45 浏览: 227
pytorch数据预处理错误的解决
5星 · 资源好评率100%
这个错误通常是由于在同一个进程中多次创建 SparkContext 导致的。在 PySpark 中,每个 SparkContext 只能在同一个进程中创建一次,如果想要在同一进程中多次使用 SparkContext,需要先停止之前创建的 SparkContext,然后再重新创建一个新的 SparkContext。
因此,建议在创建 SparkContext 之前先检查当前是否已经存在 SparkContext 实例,如果存在,则先停止之前的实例,再创建新的实例。
可以将函数修改如下,添加 `SparkContext` 是否存在的检查:
```
from pyspark.sql import SparkSession
from pyspark import SparkContext
def spark_sql_test(m):
# 检查当前是否已经存在 SparkContext 实例
if SparkContext._active_spark_context is not None:
SparkContext._active_spark_context.stop()
spark = SparkSession.builder.appName("test_spark_sql").getOrCreate()
result = spark.sql(m)
df = spark.createDataFrame(result.rdd, result.schema)
df_pd = df.toPandas()
spark.stop()
return df_pd
```
这样修改后,每次调用 `spark_sql_test` 函数时,如果当前已经存在 SparkContext 实例,则会先停止之前的实例,再创建新的实例,避免了多次创建 SparkContext 导致的错误。
阅读全文