是否可以使用select语句在spark上创建表?
我做以下
import findspark
findspark.init()
import pyspark
from pyspark.sql import SQLContext
sc = pyspark.SparkContext()
sqlCtx = SQLContext(sc)
spark_df = sqlCtx.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load("./data/documents_topics.csv")
spark_df.registerTempTable("my_table")
sqlCtx.sql("CREATE TABLE my_table_2 AS SELECT * from my_table")
但我收到了错误
/用户/用户/安纳康达/ bin中/蟒 /Users/user/workspace/Outbrain-Click-Prediction/test.py使用Spark' s 默认log4j配置文件:org / apache / spark / log4j-defaults.properties 将默认日志级别设置为" WARN"。调整日志记录级别使用 sc.setLogLevel(newLevel)。 17/01/21 17:19:43 WARN NativeCodeLoader: 无法为您的平台加载native-hadoop库...使用 适用于Traceback的内置java类(最近的调用 最后):文件 " /Users/user/spark-2.0.2-bin-hadoop2.7/python/pyspark/sql/utils.py" ;, 第63行,装饰 return f(* a,** kw)File" /Users/user/spark-2.0.2-bin-hadoop2.7/python/lib/py4j-0.10.3-src.zip/py4j/protocol。 py",第319行,在get_return_value py4j.protocol.Py4JJavaError:错误 调用o19.sql时发生。 : org.apache.spark.sql.AnalysisException:未解析的运算符 ' CreateHiveTableAsSelectLogicalPlan CatalogTable(表:
my_table_2
创建时间:1月21日星期六17:19:53 2017最后访问:12月31日星期三 美国东部时间18:59:59 1969类型:MANAGED存储(输入格式: org.apache.hadoop.mapred.TextInputFormat,OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat)),false ;; ' CreateHiveTableAsSelectLogicalPlan CatalogTable(表:my_table_2
创建时间:1月21日星期六17:19:53 2017最后访问:12月31日星期三 美国东部时间18:59:59 1969类型:MANAGED存储(输入格式: org.apache.hadoop.mapred.TextInputFormat,OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat)),false: + - 项目[document_id#0,topic_id#1,confidence_level#2]:+ - SubqueryAlias my_table:+ - 关系[document_id#0,topic_id#1,confidence_level#2] csv在 org.apache.spark.sql.catalyst.analysis.CheckAnalysis $ class.failAnalysis(CheckAnalysis.scala:40) 在 org.apache.spark.sql.catalyst.analysis.Analyzer.failAnalysis(Analyzer.scala:58) 在 org.apache.spark.sql.catalyst.analysis.CheckAnalysis $$ anonfun $ checkAnalysis $ 1.适用(CheckAnalysis.scala:374) 在 org.apache.spark.sql.catalyst.analysis.CheckAnalysis $$ anonfun $ checkAnalysis $ 1.适用(CheckAnalysis.scala:67) 在 org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:126) 在 org.apache.spark.sql.catalyst.analysis.CheckAnalysis $ class.checkAnalysis(CheckAnalysis.scala:67) 在 org.apache.spark.sql.catalyst.analysis.Analyzer.checkAnalysis(Analyzer.scala:58) 在 org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:49) 在org.apache.spark.sql.Dataset $ .ofRows(Dataset.scala:64)at at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:582)at at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237)at at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)at py4j.Gateway.invoke(Gateway.java:280)at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 在py4j.commands.CallCommand.execute(CallCommand.java:79)at py4j.GatewayConnection.run(GatewayConnection.java:214)at java.lang.Thread.run(Thread.java:745)
在处理上述异常期间,发生了另一个异常:
Traceback(最近一次调用最后一次):文件 " /Users/user/workspace/Outbrain-Click-Prediction/test.py" ;,第16行,在 sqlCtx.sql(" CREATE TABLE my_table_2 AS SELECT * from my_table")文件 " /Users/user/spark-2.0.2-bin-hadoop2.7/python/pyspark/sql/context.py" ;, 第360行,在sql中 return self.sparkSession.sql(sqlQuery)File" /Users/user/spark-2.0.2-bin-hadoop2.7/python/pyspark/sql/session.py", 第543行,在sql中 返回DataFrame(self._jsparkSession.sql(sqlQuery),self._wrapped)文件 " /Users/user/spark-2.0.2-bin-hadoop2.7/python/lib/py4j-0.10.3-src.zip/py4j/java_gateway.py" ;, 第1133行,在调用文件中 " /Users/user/spark-2.0.2-bin-hadoop2.7/python/pyspark/sql/utils.py" ;, 第69行,装饰 提出AnalysisException(s.split(':',1)[1],stackTrace)pyspark.sql.utils.AnalysisException:" unresolved运算符 ' CreateHiveTableAsSelectLogicalPlan CatalogTable(\ n \ tTable:
my_table_2
\ n \ t处理:2017年1月21日星期六17:19:53 2017年\ n \ t最后访问: Wed Dec 31 18:59:59 EST 1969 \ n \ tType:MANAGED \ n \ tStorage(InputFormat: org.apache.hadoop.mapred.TextInputFormat,OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat)), false ;; \ n' CreateHiveTableAsSelectLogicalPlan CatalogTable(\ n \ tTable:my_table_2
\ n \ t处理:2017年1月21日星期六17:19:53 2017年\ n \ t最后访问: Wed Dec 31 18:59:59 EST 1969 \ n \ tType:MANAGED \ n \ tStorage(InputFormat: org.apache.hadoop.mapred.TextInputFormat,OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat)),false \ n: + - 项目[document_id#0,topic_id#1,confidence_level#2] \ n:+ - SubqueryAlias my_table \ n:+ - 关系[document_id#0,topic_id#1,confidence_level#2] csv \ n"
答案 0 :(得分:4)
我已使用HiveContext
代替SQLContext
更正了此问题,如下所示:
import findspark
findspark.init()
import pyspark
from pyspark.sql import HiveContext
sqlCtx= HiveContext(sc)
spark_df = sqlCtx.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load("./data/documents_topics.csv")
spark_df.registerTempTable("my_table")
sqlCtx.sql("CREATE TABLE my_table_2 AS SELECT * from my_table")
答案 1 :(得分:0)
您应首先进行选择并将其分配给数据框变量,然后将其与registerTempTable
一起注册,就像使用CSV文件创建的数据框一样