代码之家  ›  专栏  ›  技术社区  ›  Sergej Andrejev

创建Spark数据帧时JSC为空

  •  0
  • Sergej Andrejev  · 技术社区  · 6 年前

    我在努力学习火花,所以不要苛刻地评判。我有以下问题。我可以运行类似这样的spark基本示例

    import os
    os.environ['PYSPARK_PYTHON'] = '/g/scb/patil/andrejev/python36/bin/python3'
    import random
    from pyspark import SparkConf, SparkContext
    from pyspark.sql.types import *
    from pyspark.sql import *
    sc.stop()
    conf = SparkConf().setAppName('').setMaster('spark://remotehost:7789').setSparkHome('/path/to/spark-2.3.0-bin-hadoop2.7/') 
    sc = SparkContext(conf=conf) 
    
    num_samples = 100
    def inside(p):
        x, y = random.random(), random.random()
        return x*x + y*y < 1
    
    count = sc.parallelize(range(0, num_samples)).filter(inside).count()
    pi = 4 * count / num_samples
    print(pi)
    

    但是当我创建数据帧时,我有一个错误,即jsc为空

    eDF = sqlContext.createDataFrame([Row(a=1, intlist=[1,2,3], mapfield={"a": "b"})])  
    /usr/local/spark/python/pyspark/traceback_utils.py in __enter__(self)
         70     def __enter__(self):
         71         if SCCallSiteSync._spark_stack_depth == 0:
    ---> 72             self._context._jsc.setCallSite(self._call_site)
         73         SCCa._spark_stack_depth += 1
    

    以下是在本地计算机上设置的环境变量

    SPARK_HOME': '/usr/local/spark/    
    PYSPARK_DRIVER_PYTHON: '/usr/bin/python3'
    PYSPARK_DRIVER_PYTHON_OPTS: 'notebook'
    PYSPARK_PYTHON: '/g/scb/patil/andrejev/python36/bin/python3'
    PATH': '...:/usr/lib/jvm/java-8-oracle/jre/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/spark/bin'
    

    在远程机器上

    PYSPARK_PYTHON=/g/scb/patil/andrejev/python36/bin/python3
    PYSPARK_DIRVER_PYTHON=/g/scb/patil/andrejev/python36/bin/python3
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Sergej Andrejev    6 年前

    最后,我发现我有两个会话(一个是默认的,另一个是我创建的)同时运行。我明确地结束了使用我的会话来创建数据帧。

    sess = SparkSession(sc)
    freq_signal = sess.createDataFrame([Row(a=1, intlist=[1,2,3], mapfield={"a": "b"})])