我有一些基本上看起来像这样的Python代码:
my_start_list = ...
def process ( my_list ):
#do some stuff
if len(my_list) > 1:
process(my_list)
else:
print(my_list)
return my_list
print(process(my_start_list))
Run Code Online (Sandbox Code Playgroud)
奇怪的是:print(my_list)打印出正确的内容.但是,打印函数返回值的第二个print语句始终打印"None".即使我用return("abc")替换正常的return语句,它仍然是None.
由于变量的内容在return语句之前似乎是正确的一行,我不知道从哪里开始调试.是否有可能导致此问题的常见问题?
我正在尝试在Spark Shell中使用twitterUtils(默认情况下它们不可用).
我添加了以下内容spark-env.sh:
SPARK_CLASSPATH="/disk.b/spark-master-2014-07-28/external/twitter/target/spark-streaming-twitter_2.10-1.1.0-SNAPSHOT.jar"
Run Code Online (Sandbox Code Playgroud)
我现在可以执行了
import org.apache.spark.streaming.twitter._
import org.apache.spark.streaming.StreamingContext._
Run Code Online (Sandbox Code Playgroud)
没有shell中的错误,如果没有将jar添加到类路径中是不可能的("错误:对象twitter不是包org.apache.spark.streaming的成员").但是,在Spark shell中执行它时会出错:
scala> val ssc = new StreamingContext(sc, Seconds(1))
ssc: org.apache.spark.streaming.StreamingContext =
org.apache.spark.streaming.StreamingContext@6e78177b
scala> val tweets = TwitterUtils.createStream(ssc, "twitter.txt")
error: bad symbolic reference. A signature in TwitterUtils.class refers to
term twitter4j in package <root> which is not available.
It may be completely missing from the current classpath, or the version on the classpath might be incompatible with the version used when compiling
TwitterUtils.class.
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我必须再导入另一个罐子吗?
在具有多个工作节点的Spark 1.0.0独立模式中,我正在尝试从两台不同的计算机(同一Linux用户)运行Spark shell.
在文档中,它说"默认情况下,提交给独立模式群集的应用程序将以FIFO(先进先出)顺序运行,每个应用程序将尝试使用所有可用节点."
每个工作程序的核心数设置为4,其中8个可用(通过SPARK_JAVA_OPTS =" - Dspark.cores.max = 4").内存也是有限的,因此两者都应该可用.
但是,在查看Spark Master WebUI时,稍后启动的shell应用程序将始终保持"WAITING"状态,直到退出第一个.分配给它的核心数是0,每个节点10G的内存(与已经运行的核心相同)
有没有办法让两个shell同时运行而不使用Mesos?
我试图从 spark-sql 中的 SQL 语句中获取一个整数。
var num_en = ctx.sql("SELECT count(*) FROM table WHERE lang = 'en'")
num = num_en.collect()(0)
Run Code Online (Sandbox Code Playgroud)
num_en 是一个 SchemaRDD,而 num,根据我得到的错误,是一个“行”。
<console>:144: error: type mismatch;
found : org.apache.spark.sql.Row
(which expands to) org.apache.spark.sql.catalyst.expressions.Row
Run Code Online (Sandbox Code Playgroud)
问题是我找不到 org.apache.spark.sql.Row 或 org.apache.spark.sql.catalyst.expressions.Row 的任何有用文档。
如何提取 SQL 语句返回的这个整数值供以后使用?
我想从包含"b"的子列表中检索整数值作为第一个元素(b只会在列表中出现一次)
我想到了这两种方式:
foo = [["a", 5], ["b", 10], ["c", 100]]
y = filter(lambda x: x[0] == "b", foo)
print y[0][1]
z = [foo[i][1] for i in range(len(foo)) if foo[i][0] == "b"]
print z[0]
Run Code Online (Sandbox Code Playgroud)
他们都工作.是两个中的任何一个(关于运行时),是否有更好的第三种方式?
我有一个接收许多参数的函数.
为了使我的代码看起来更清晰,更好维护,我想将函数的某些部分外包给同一个类中的另一个函数.
此新功能需要与原始功能相同的参数.有没有办法一次传递这个函数的所有参数(当然是以相同的顺序),而不是必须全部写出它们?
我使用的是最新的Spark主,另外,我加载这些罐子: - 火花流-twitter_2.10-1.1.0-SNAPSHOT.jar - twitter4j核-4.0.2.jar - twitter4j流-4.0.2 .罐
我在shell中执行的简单测试程序如下所示:
import org.apache.spark.streaming._
import org.apache.spark.streaming.twitter._
import org.apache.spark.streaming.StreamingContext._
System.setProperty("twitter4j.oauth.consumerKey", "jXgXF...")
System.setProperty("twitter4j.oauth.consumerSecret", "mWPvQRl1....")
System.setProperty("twitter4j.oauth.accessToken", "26176....")
System.setProperty("twitter4j.oauth.accessTokenSecret", "J8Fcosm4...")
var ssc = new StreamingContext(sc, Seconds(1))
var tweets = TwitterUtils.createStream(ssc, None)
var statuses = tweets.map(_.getText)
statuses.print()
ssc.start()
Run Code Online (Sandbox Code Playgroud)
但是,我不会收到任何推文.我看到的主要错误是
14/08/04 10:52:35 ERROR scheduler.ReceiverTracker: Deregistered receiver for stream 0: Error starting receiver 0 - java.lang.NoSuchMethodError: twitter4j.TwitterStream.addListener(Ltwitter4j/StatusListener;)V
at org.apache.spark.streaming.twitter.TwitterReceiver.onStart(TwitterInputDStream.scala:72)
....
Run Code Online (Sandbox Code Playgroud)
然后为每次迭代:
INFO scheduler.ReceiverTracker: Stream 0 received 0 blocks
Run Code Online (Sandbox Code Playgroud)
我不确定问题出在哪里.如何验证我的Twitter凭据是否被正确识别?可能还有另一个罐子丢失了吗?