pyspark中的函数input()

时间:2017-01-08 12:01:59

标签: python apache-spark pyspark rdd

我的问题是当我输入p的值时,没有任何事情发生,它没有追求执行:有没有办法解决它?

import sys
from pyspark import SparkContext
sc = SparkContext("local", "simple App") 

p =input("Enter the word")
rdd1 = sc.textFile("monfichier") 
rdd2= rdd1.map(lambda l : l.split("\t")) 
rdd3=rdd2.map(lambda l: l[1])  
print rdd3.take(6)
rdd5=rdd3.filter(lambda l : p in l)

sc.stop()

3 个答案:

答案 0 :(得分:2)

你必须区分不同的情况:

  • 使用$SPARK_HOME/bin/spark-submit script.py

    提交的脚本

    在这种情况下,您执行Scala应用程序,后者又启动Python解释器。由于Scala应用程序并不期望从标准输入中进行任何交互,更不用说将其传递给Python解释器,因此您的Python脚本将只是等待那些不会来的数据。

  • 使用Python解释器(python script.py)直接执行脚本。

    您应该可以直接使用input,但代价是处理所有配置详细信息,通常由spark-submit / org.apache.spark.deploy.SparkSubmit处理,在您的代码中手动处理。

通常,脚本的所有必需参数都可以使用命令行

传递
$SPARK_HOME/bin/spark-submit script.py some_app_arg another_app_arg

并使用sys.argvargparse等标准方法进行访问,使用input既不必要也无用。

答案 1 :(得分:2)

您可以使用py4j通过Java获取输入
像这样

scanner = sc._gateway.jvm.java.util.Scanner  
sys_in = getattr(sc._gateway.jvm.java.lang.System, 'in')  
result = scanner(sys_in).nextLine()  
print result

答案 2 :(得分:0)

我在Azure DataBrick中遇到了同样的问题,我使用小部件从用户那里获取输入。