首页 文章

pyspark 1.6.0试图在hive上下文中使用approx_percentile导致pyspark.sql.utils.AnalysisException

提问于
浏览
0

在尝试编写代码来实现此评论时: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行,在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:你”缺少'在','靠近'';第1行pos 27“17/12/12 18:53:15 INFO spark.SparkContext:调用stop ()来自shutdown hook

我无法确定设置Hive Context是否有问题,还是Hive需要解决的问题?

1 回答

  • 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()
    

相关问题