【发布时间】:2017-03-07 21:22:05
【问题描述】:
我试图在 spark 1.6 中使用 SQLContext.sql 从别名中进行简单的选择。
sqlCtx = SQLContext(sc)
## Import CSV File
header = (sc.textFile("data.csv")
.map(lambda line: [x for x in line.split(",")]))
## Convert RDD to DF, specify column names
headerDF = header.toDF(['header', 'adj', 'desc'])
## Convert Adj Column to numeric
headerDF = headerDF.withColumn("adj", headerDF['adj'].cast(DoubleType()))
headerDF.registerTempTable("headerTab")
head = sqlCtx.sql("select d.desc from headerTab as d").show()
我注意到这似乎在 Spark 2.0 中有效,但我目前仅限于 1.6。
这是我看到的错误消息。对于一个简单的选择,我可以删除别名,但最终我试图对具有相同列名的多个表进行连接。
Spark 1.6 错误
Traceback (most recent call last):
File "/home/temp/text_import.py", line 49, in <module>
head = sqlCtx.sql("select d.desc from headerTab as d").show()
File "/home/pricing/spark-1.6.1/python/lib/pyspark.zip/pyspark/sql/context.py", line 580, in sql
File "/home/pricing/spark-1.6.1/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 813, in __call__
File "/home/pricing/spark-1.6.1/python/lib/pyspark.zip/pyspark/sql/utils.py", line 45, in deco
File "/home/pricing/spark-1.6.1/python/lib/py4j-0.9-src.zip/py4j/protocol.py", line 308, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o64.sql.
: java.lang.RuntimeException: [1.10] failure: ``*'' expected but `desc' found
Spark 2.0 回归
+--------+
| desc|
+--------+
| data|
| data|
| data|
【问题讨论】:
-
您的问题在于
desc,因为desc是用于排序的关键字。所以试试这个 head = sqlCtx.sql("select d.descfrom headerTab as d").show() -
我无法理解您的建议有何不同,但我确实理解您对关键字的意思。我将列名更改为 descTmp,它按设计工作。感谢您的帮助,我会发布答案。
标签: apache-spark pyspark