从一个火花数据框中取出 n 行并传递给 Pandas()

我有这个密码:

l = [('Alice', 1),('Jim',2),('Sandra',3)]
df = sqlContext.createDataFrame(l, ['name', 'age'])
df.withColumn('age2', df.age + 2).toPandas()

效果很好,做了该做的事。假设我只想显示前 n 行,然后调用 toPandas()返回熊猫数据帧。我该怎么做?我不能调用 take(n),因为它不返回数据帧,因此我不能将它传递给 toPandas()

那么换句话说,我怎样才能从一个数据帧中获取最上面的 n 行,并在结果数据帧上调用 toPandas()呢?我不觉得这很难,但是我想不出来。

我用的是 Spark 1.6.0。

163755 次浏览

你可以使用 limit(n)函数:

l = [('Alice', 1),('Jim',2),('Sandra',3)]
df = sqlContext.createDataFrame(l, ['name', 'age'])
df.limit(2).withColumn('age2', df.age + 2).toPandas()

或者:

l = [('Alice', 1),('Jim',2),('Sandra',3)]
df = sqlContext.createDataFrame(l, ['name', 'age'])
df.withColumn('age2', df.age + 2).limit(2).toPandas()

你可以使用 获得第一行 Spark DataFrame,然后创建 Panda DataFrame:

l = [('Alice', 1),('Jim',2),('Sandra',3)]
df = sqlContext.createDataFrame(l, ['name', 'age'])


df_pandas = pd.DataFrame(df.head(3), columns=df.columns)


In [4]: df_pandas
Out[4]:
name  age
0   Alice    1
1     Jim    2
2  Sandra    3

试试看:

def showDf(df, count=None, percent=None, maxColumns=0):
if (df == None): return
import pandas
from IPython.display import display
pandas.set_option('display.encoding', 'UTF-8')
# Pandas dataframe
dfp = None
# maxColumns param
if (maxColumns >= 0):
if (maxColumns == 0): maxColumns = len(df.columns)
pandas.set_option('display.max_columns', maxColumns)
# count param
if (count == None and percent == None): count = 10 # Default count
if (count != None):
count = int(count)
if (count == 0): count = df.count()
pandas.set_option('display.max_rows', count)
dfp = pandas.DataFrame(df.head(count), columns=df.columns)
display(dfp)
# percent param
elif (percent != None):
percent = float(percent)
if (percent >=0.0 and percent <= 1.0):
import datetime
now = datetime.datetime.now()
seed = long(now.strftime("%H%M%S"))
dfs = df.sample(False, percent, seed)
count = df.count()
pandas.set_option('display.max_rows', count)
dfp = dfs.toPandas()
display(dfp)

用法的例子有:

# Shows the ten first rows of the Spark dataframe
showDf(df)
showDf(df, 10)
showDf(df, count=10)


# Shows a random sample which represents 15% of the Spark dataframe
showDf(df, percent=0.15)