dataframe或sqlctx(sqlcontext)生成“试图调用包”错误

时间:2015-06-04 14:56:41

标签: python apache-spark apache-spark-sql pyspark

我正在使用spark 1.3.1。在PySpark中,我从RDD创建了一个DataFrame并注册了模式,如下所示:

dataLen=sqlCtx.createDataFrame(myrdd, ["id", "size"])
dataLen.registerTempTable("tbl")

此时一切正常我可以从“tbl”进行“选择”查询,例如“从tbl选择大小,其中id ='abc'”。

然后在Python函数中,我定义了类似的东西:

def  getsize(id):
    total=sqlCtx.sql("select size from tbl where id='" + id + "'")
    return total.take(1)[0].size

此时仍然没有问题,我可以执行getsize("ab")并确实返回一个值。

当我在一个rdd中调用getsize时发生了问题,比如我有一个rdd命名数据,它是(key,value)列表,当我这样做时

data.map(lambda x: (x[0], getsize("ab"))

这会产生错误

  

py4j.protocol.Py4JError:试图调用包

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Spark不支持嵌套操作或转换,并且驱动程序外无法访问SQLContext。所以你在这里做的事情根本行不通。目前还不清楚你想要的是什么,但很可能是一个简单的join,无论是在RDDs还是DataFrames都可以做到这一点。