簡體   English   中英

PySpark org.apache.spark.sql.AnalysisException:找不到表或視圖:

[英]PySpark org.apache.spark.sql.AnalysisException: Table or view not found:

我有一個與 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)...

如果有幫助,我當然可以發布更多代碼,但我真的只是按照教程進行操作而沒有任何更改。

第一階段的流媒體設置看起來不錯,因為我可以看到正在發送的推文。

有什么建議?

謝謝!

我猜數據框沒有創建,例如 tempview。 您必須使用“tweets”臨時視圖名稱創建數據框。 示例代碼是:

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()

在此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 ,它應該可以工作。 它不會拋出異常,但它應該

問題可能是->
1.您的火花默認在紗線中,將其更改為本地模式。

2.只有一個executor在工作,接收消息,沒有executor在處理消息。

解決方案:在打開 jupyter 時,請按照以下命令進行操作。(確保您的 pyspark2 默認在 jupyter 中打開)

[cloudera@quickstart ~]$ pyspark2 --master 本地[2]

這應該可以解決您的問題。

問題可能是 SPARK 版本與您的 SQLContext 代碼不兼容。

我對代碼進行了一些更改並使其正常工作。

Step1:從Sql函數導入Spark Session

from pyspark.sql import SparkSession,SQLContext

Step2:創建一個Spark Sql會話:

spark = SparkSession.builder.appName('Sparksql').getOrCreate()

步驟 3:代替 registerTempTable 使用 createOrReplaceTempView : .limit(10).createOrReplaceTempView("tweets")

Step4:檢查Sql是否如下工作:

top_10_tweets = spark.sql( 'Select tag, count from tweets' )
top_10_tweets.show()

請讓我們知道你是如何處理它的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM