[英]PySpark: org.apache.spark.sql.AnalysisException: Attribute name ... contains invalid character(s) among " ,;{}()\n\t=". Please use alias to rename it
[英]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.