通过 pyspark 中的映射函数计算 Spark 中 sql 数据帧的数量


一个新手,对

数据框上的map函数有问题。我有一个火花sql数据帧,名为df,假设它是这样的:

+----------+------------+------+
|      time|         tag| value|
+----------+------------+------+
|1399766400|A00000000001|1000.0|
|1399766401|A00000000002|1001.0|
+----------+------------+------+

我可以使用以下命令根据标签值选择其中的一部分:

temp = sqlContext.sql("SELECT * FROM df WHERE tag = 'A00000000001'")
temp.show(1)

然后我们有:

+----------+------------+------+
|      time|         tag| value|
+----------+------------+------+
|1399766400|A00000000001|1000.0|
+----------+------------+------+

目前,我有一个列表

x = ["SELECT * FROM df WHERE tag = 'A00000000001'", "SELECT * FROM df WHERE tag = 'A00000000002'"]

它已存储为 RDD 变量,我想在其上应用map函数来计算根据它们选择的数据帧数量,我尝试了以下函数:

y = x.map(lambda x: sqlContext.sql(x).count())
y.take(2)

我认为返回值应该是[1, 1]的,但它给出了错误:

TypeError: 'JavaPackage' object is not callable

是否可以使用此方法在数据帧上执行映射函数? 如果没有,我该怎么办。

如前所述,不可能对分布式数据结构执行嵌套操作。在更一般的意义上,Spark不是一个数据库。Spark 数据结构(包括DataFrames)不是为单记录检索等任务而设计的。

如果所有查询都遵循相同的模式,即按列使用简单筛选器,则只需简单聚合 with 和 join:

tags = sc.parallelize([("A00000000001", ), ("A00000000002", )]).toDF(["tag"])
tags.join(df, ["tag"]).groupBy("tag").count()
<</div> div class="one_answers">

这是不可能的。您可以使用列表推导式:

>>> xs = ["SELECT * FROM df WHERE tag = 'A00000000001'", "SELECT * FROM df WHERE tag = 'A00000000002'"]
>>> [sqlContext.sql(x).count() for x in xs]

相关内容

  • 没有找到相关文章

最新更新