如何在pyspark.sql

时间:2017-01-21 22:43:32

标签: python apache-spark pyspark pyspark-sql

是否可以使用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"

2 个答案:

答案 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文件创建的数据框一样