我的问题是当我输入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()
答案 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
答案 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中遇到了同样的问题,我使用小部件从用户那里获取输入。