Skip to main content
 首页 » 编程设计

python之PySpark org.apache.spark.sql.AnalysisException : Table or view not found:

2024年09月07日34EasonJim

我有一个问题类似于许多其他已发布的关于 PySpark 的问题,但这些解决方案似乎都不适用于我的问题,所以我发布了一个新问题。

我正在学习本教程 https://github.com/emiljdd/Tweepy-SparkTwitterI ,但似乎无法使第 II 阶段的第 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)... 

如果有帮助,我当然可以发布更多代码,但我实际上只是按照教程进行操作,没有进行任何更改。

第一阶段的流媒体设置似乎很好,因为我可以看到正在发送的推文。

有什么建议吗?

谢谢!

请您参考如下方法:

我猜数据框没有创建,例如 tempview。您必须使用“tweets”临时 View 名称创建数据框。示例代码是:

dataFrame.createOrReplaceTempView("tweets") 

请检查您的代码是否包含此创建。

示例片段:

from pyspark.sql import SparkSession 
 
spark = SparkSession.builder.appName('Dataframe example').getOrCreate() 
 
dataframe = spark.read.csv("/path/to/file.csv", inferSchema = True, header = True) 
dataframe.show() 
dataframe.createOrReplaceTempView("tempview") 
 
spark.sql('select id,name from tempview').show() 
spark.sql('select avg(age) from tempview').show()