2016-12-24 59 views
0

这是我使用的代码。如何在Spark中使用请求模块?

from __future__ import print_function 
import sys 
from pyspark.sql import SparkSession 
import sys 
sys.path.append('/usr/local/lib/python2.7/site-packages') 
import requests 

if __name__ == "__main__": 
    s = Session() 
    toGet = s.get 

    spark = SparkSession\ 
     .builder\ 
     .appName("PythonDockerRepoStat")\ 
     .getOrCreate() 

    lines = spark.read.text('/data/urls.txt').rdd.map(lambda r: r[0]) 
    res = lines.flatMap(lambda x: x.split("\n"))\ 
     .map(lambda x: toGet(x)) 
    output = res.collect() 
    print(output) 

不过,我得到这个错误:导入错误:没有模块名为requests.sessions

+0

启动pyspark shell和'import requests'。I吨将工作。 – MYGz

回答

1

当启动星火作业的所有依赖关系必须为可访问:

  • 司机解释。
  • 执行者解释器。

扩展路径:

sys.path.append('/usr/local/lib/python2.7/site-packages') 

只会影响当地的司机解释。要设置执行环境变量您可以:通过编辑$SPARK_HOME/conf/spark-defaults.conf或设置相应SparkConf关键

  • 修改$SPARK_HOME/conf/spark-env.sh
  • 使用spark.executorEnv.[EnvironmentVariableName]配置选项(例如

同时,你应该确保requests在每个工作节点上安装/可访问(如果不使用本地/伪分布模式)。

+0

它是有道理的,虽然我没有尝试。 –

+1

现在有效。谢谢。 –

+0

@ Victor.Li你会考虑接受答案吗?谢谢! :) – user7337271