pyspark中的函数input()

问题描述 投票:2回答:2

我的问题在于,当我输入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()
python apache-spark pyspark rdd
2个回答
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既不必要也不有用。


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
© www.soinside.com 2019 - 2024. All rights reserved.