python-如何在不使用RDD API的情况下摆脱pyspark数据帧中的行包装器对象?

我针对临时视图发布以下SQL语句

cloudantdata.createOrReplaceTempView("washingflat")

sqlDF = spark.sql("SELECT temperature FROM washingflat")
sqlDF.rdd.map(lambda row : row.temperature).collect()

我只是对普通的(展开的)整数值感兴趣.到目前为止,我使用dataframe API进行的所有尝试始终返回包装了我感兴趣的值的行对象.

有没有一种方法可以在不使用RDD API的情况下获取标量内容?

解决方法:

所以给定一个输入DataFrame

import numpy as np
import pandas as pd
test_df = pd.DataFrame({'Age': np.random.uniform(0,100, size = (100,)), 'City': 'LA'})
sqlContext.createDataFrame(test_df).registerTempTable('AgeTable')

有两种(主要)方法可以在不使用行抽象的情况下提取值.第一种是使用DataFrame / SQL查询的.toPandas()方法

print(sqlContext.sql("SELECT Age FROM AgeTable").toPandas()['Age'])

这将返回一个Pandas DataFrame /系列.

第二个是将数据实际分组到SQL内部,然后从单个Row对象中提取数据

al_qry = sqlContext.sql("SELECT City, COLLECT_SET(Age) as AgeList FROM AgeTable GROUP BY City")
al_qry.first()[0].AgeList

这将返回原始的python列表.

toPandas方法是更有效的方法,将来可能会对此方法进行进一步的改进.

上一篇:python-从PySpark中的几列从groupby获取具有最大值的行


下一篇:如何将Python连接到Spark会话并使RDD保持活动状态