Dataframe Row(sum(fld)) 到离散值

Posted

技术标签:

【中文标题】Dataframe Row(sum(fld)) 到离散值【英文标题】:Dataframe Row(sum(fld)) to a discrete value 【发布时间】:2020-05-07 23:06:35 【问题描述】:

我有这个:

df = sqlContext.sql(qry)
df2 = df.withColumn("ext", df.lvl * df.cnt)
ttl = df2.agg(F.sum("ext")).collect()

返回这个:

[Row(sum(ext)=1285430)]

如何在不作为列表 Row(sum()) 的情况下将其简化为谨慎的值 1285430

我研究并尝试了很多事情,我完全被困住了。

【问题讨论】:

这能回答你的问题吗? PySpark - Sum a column in dataframe and return results as int 另外,您将其标记为 databricks,但我认为这里没有任何特定于 databricks 的内容,如果您搜索 spark 或 pyspark 而不是指定 databricks,则可以获得更多信息。 根据她在 SO 上的协议接受答案可能是一个想法。 【参考方案1】:

无需收集:

n = ...your transformation logic and agg... .first().getInt(0)

【讨论】:

【参考方案2】:

访问第一行,然后将第一个元素作为 int 获取。

df2.agg(F.sum("ext")).collect()(0).getInt(0)

查看文档:Spark ScalaDoc。

【讨论】:

【参考方案3】:

也可以 df.collect()[0][0] -or- df.collect()[0]['sum(ext)']

【讨论】:

以上是关于Dataframe Row(sum(fld)) 到离散值的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL 上的 RANK、ROW_NUMBER

Scala - 如何将 Dataset[Row] 转换为可添加到 Dataframe 的列

从 JavaRDD<Row> 创建的 Spark DataFrame 将所有列数据复制到第一列

scala.collection.immutable.Iterable[org.apache.spark.sql.Row] 到 DataFrame ?错误:使用替代方法重载了方法值 createDat

创建结构 PySpark 的 DataFrame

来自先前 ROW 值的 SUM