【问题标题】:How to access to a cell into a dataframe如何将单元格访问到数据框中
【发布时间】:2019-10-15 06:50:26
【问题描述】:

试图从 DataFrame 中获取值的问题

我在 Databricks 中使用 pyspark,我试图将行数作为一个值来进行一些计算

我做了什么:

f=sqlContext.sql('SELECT COUNT(*) AS COUNTF FROM SOOMLA')
#It´s a dataframe

现在我想将这个数字作为一个值放入 DataFrame 中进行计算,我已经尝试过:

f['COUNTF'].iloc[0]

但我得到了:

Out[158]: Column<b'COUNTF[iloc][0]'>

我怎样才能得到这个 439016392 作为一个值?

【问题讨论】:

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


【解决方案1】:

我猜你在使用iloc 时将 Pandas df 与 Spark df 混合使用。

type(f['COUNTF'])

pyspark.sql.column.Column

您可以按照 Ben T 的建议:

f=sqlContext.sql('SELECT * FROM SOOMLA').count()
print(f)

或先将 df 转换为 pandas,然后:

f=sqlContext.sql('SELECT COUNT(*) AS COUNTF FROM SOOMLA').toPandas()['COUNTF'].iloc[0]
print(f)

【讨论】:

    【解决方案2】:

    您可以运行collect() 并将第一项提取到变量中。这是一个例子:

    f = sqlContext.sql('SELECT COUNT(*) AS COUNTF FROM SOOMLA').collect()[0][0]
    
    print(f)
    #3
    
    type(f)
    #int
    

    collect() 返回行列表。所以collect()[0] 将返回列表中的第一行,collect()[0][0] 将返回列表中第一行的第一个元素。

    这里我们正在运行COUNT(*),它将返回一条记录/行。所以在这种情况下,collect() 返回一个只有一行的列表,我们需要从第一行中提取第一个元素,这样collect()[0][0] 才能工作。

    我希望这个解释有帮助!

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多