我遇到的问题与许多其他有关PySpark的问题类似,但是这些解决方案似乎都不适合我的问题,因此我要发布一个新问题。
我正在按照本教程https://github.com/emiljdd/Tweepy-SparkTwitterI进行操作,但似乎无法使第二阶段的步骤7正常工作。
运行此代码:
count = 0
while count < 10:
time.sleep( 3 )
top_10_tweets = sqlContext.sql( 'Select tag, count from tweets' )
top_10_df = top_10_tweets.toPandas() # Dataframe library
display.clear_output(wait=True) #Clears the output, if a plot exists.
sns.plt.figure( figsize = ( 10, 8 ) )
sns.barplot( x="count", y="tag", data=top_10_df)
sns.plt.show()
count = count + 1
我收到以下错误:
Py4JJavaError: An error occurred while calling o24.sql.
: org.apache.spark.sql.AnalysisException: Table or view not found: tweets; line 1 pos 23
at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:47)
at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$.org$apache$spark$sql$catalyst$analysis$Analyzer$ResolveRelations$$lookupTableFromCatalog(Analyzer.scala:665)
at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$.resolveRelation(Analyzer.scala:617)
at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply$8.applyOrElse(Analyzer.scala:647)
at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveRelations$$anonfun$apply$8.applyOrElse(Analyzer.scala:640)...
我当然可以发布更多代码(如果有帮助的话),但实际上,我只是在遵循本教程,没有任何更改。
第一阶段的流媒体设置看起来不错,因为我可以看到发送了Tweets。
有什么建议吗?
谢谢!
答案 0 :(得分:1)
我猜没有创建像tempview这样的数据框。您必须使用“ tweets”临时视图名称创建数据框。示例代码为:
dataFrame.createOrReplaceTempView("tweets")
请检查您的代码中是否包含此创建内容。
答案 1 :(得分:0)
有关此https://github.com/emiljdd/Tweepy-SparkTwitterI/issues/5
的问题,在github问题页面上已回答问题是该代码行中该教程的第4步
( lines.flatMap( lambda text: text.split( " " ) )
.filter( lambda word: word.lower().startswith("#") )
.map( lambda word: ( word.lower(), 1 ) )
.reduceByKey( lambda a, b: a + b )
.map( lambda rec: Tweet( rec[0], rec[1] ) )
##.foreachRDD( lambda rdd: rdd.toDF().sort( desc("count") # the desc here doesnt work with
.foreachRDD( lambda rdd: rdd.toDF().sort("count")
.limit(10).registerTempTable("tweets") ) )
删除排序中的desc,它应该可以工作。它不会引发异常,但应该
答案 2 :(得分:0)
问题可能是->
1.您的火花默认值是纱线,将其更改为本地模式。
2。只有一个执行器正在工作,正在接收消息,但是没有执行器正在处理消息。
解决方案: 在打开jupyter时,请遵循以下命令。(确保pyspark2默认在jupyter中打开)
[cloudera @ quickstart〜] $ pyspark2 --master local [2]
这应该可以解决您的问题。
答案 3 :(得分:0)
问题可能出在SPARK版本与您的SQLContext代码不兼容。
我对代码进行了一些更改,并使它可以正常工作。
第一步: 从Sql函数导入Spark Session
from pyspark.sql import SparkSession,SQLContext
第2步: 创建了一个Spark Sql会话:
spark = SparkSession.builder.appName('Sparksql').getOrCreate()
Step3:
代替registerTempTable,使用createOrReplaceTempView:
.limit(10).createOrReplaceTempView("tweets")
Step4: 检查Sql是否按以下方式工作:
top_10_tweets = spark.sql( 'Select tag, count from tweets' )
top_10_tweets.show()
请让我们知道您的情况。