如何从 Spark Dataframe 中的 Row 对象获取值?

Posted

技术标签:

【中文标题】如何从 Spark Dataframe 中的 Row 对象获取值?【英文标题】:How to get a value from the Row object in Spark Dataframe? 【发布时间】:2016-06-23 18:55:23 【问题描述】:

averageCount = (wordCountsDF
                .groupBy().mean()).head()

我明白了

行(平均(计数)=1.6666666666666667)

但是当我尝试时:

averageCount = (wordCountsDF
                .groupBy().mean()).head().getFloat(0)

我收到以下错误:

属性错误:getFloat -------------------------------------------------- ------------------------- AttributeError Traceback(最近调用 最后)在() 1 # TODO: 替换为合适的代码 ----> 2 averageCount = (wordCountsDF 3 .groupBy().mean()).head().getFloat(0) 4 5 打印平均数

/databricks/spark/python/pyspark/sql/types.py in getattr(self, 项目)1270 引发 AttributeError(项目)1271 除了ValueError: -> 1272 raise AttributeError(item) 1273 1274 def setattr(self, key, value):

AttributeError: getFloat

我做错了什么?

【问题讨论】:

【参考方案1】:

我想通了。这将返回我的值:

averageCount = (wordCountsDF
                .groupBy().mean()).head()[0]

【讨论】:

【参考方案2】:

这也有效:

averageCount = (wordCountsDF
                .groupBy().mean('count').collect())[0][0]
print averageCount

【讨论】:

【参考方案3】:

Dataframe 行继承自 namedtuples(来自集合库),因此虽然您可以像上面所做的那样像传统元组一样对它们进行索引,但您可能希望通过其字段名称来访问它。那毕竟是命名元组的点,而且对未来的变化也更加健壮。像这样:

averageCount = wordCountsDF.groupBy().mean().head()['avg(jobs)']

【讨论】:

以上是关于如何从 Spark Dataframe 中的 Row 对象获取值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Spark Dataframe 中的 Row 对象获取值?

如何从 Spark DataFrame 中选择稳定的行子集?

Spark SQL:如何使用 JAVA 从 DataFrame 操作中调用 UDF

从 Spark 中的 DataFrame 中过滤和选择数据

如何在 Spark 中使用 Python 查找 DataFrame 中的分区数以及如何在 Spark 中使用 Python 在 DataFrame 中创建分区

从 Spark DataFrame 中的单列派生多列