在尝试编写代码以实现此注释时: https://stackoverflow.com/a/34521857/1730064
我编写了一个运行以下代码的小脚本:
from pyspark.sql import SQLContext, HiveContext
from pyspark import SparkContext
from pyspark.sql.types import *
sc = SparkContext.getOrCreate()
hivContext = HiveContext(sc)
print sc
from pyspark.mllib.random import RandomRDDs
#df = RandomRDDs.normalRDD(sc, 1000, 10, 1).map(Tuple1(_)).toDF("x")
df = RandomRDDs.uniformRDD(sc, 1000, 10, 1).map(lambda x: (x, )).toDF()
print df.show()
df.registerTempTable("df")
hivContext.sql("SELECT percentile_approx(_1, 0.5) FROM df").show
但是当我使用spark-submit运行代码时,我得到以下输出:
./spark-submit bar.py
...
Traceback(最近一次调用最后一次):文件“/root/bar.py”,第18行,in hivContext.sql(“SELECT percentile_approx(_1,0.5)FROM df”)。show File “/usr/local/tmpusr/third-party/spark/python/lib/pyspark.zip/pyspark/sql/context.py” 第580行,在sql文件中 “/usr/local/tmpusr/third-party/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py” 第813行,在调用文件中 “/usr/local/tmp/third-party/spark/python/lib/pyspark.zip/pyspark/sql/utils.py” 第51行,在deco pyspark.sql.utils.AnalysisException:你“缺少”at ',''附近''; line 1 pos 27“17/12/12 18:53:15 INFO spark.SparkContext:从shutdown hook调用stop()
我无法弄清楚设置Hive Context是否有问题,还是Hive需要解决的问题?
答案 0 :(得分:1)
问题是hivecontext无法直接识别列名“_1”,而是应该将其命名为其他东西,获得此权利的一种方法如下:
from pyspark.sql import SQLContext, HiveContext
from pyspark import SparkContext
from pyspark.sql.types import *
sc = SparkContext.getOrCreate()
hivContext = HiveContext(sc)
print sc
from pyspark.mllib.random import RandomRDDs
#df = RandomRDDs.normalRDD(sc, 1000, 10, 1).map(Tuple1(_)).toDF("x")
df = RandomRDDs.uniformRDD(sc, 1000, 10, 1).map(lambda x: (x, )).toDF(["var1"])
print df.show()
df.registerTempTable("df")
hivContext.sql("SELECT percentile_approx(var1, 0.5) FROM df").show()