當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python pyspark DataFrame.pandas_on_spark.apply_batch用法及代碼示例


本文簡要介紹 pyspark.pandas.DataFrame.pandas_on_spark.apply_batch 的用法。

用法:

pandas_on_spark.apply_batch(func: Callable[[…], pandas.core.frame.DataFrame], args: Tuple =(), **kwds: Any) → DataFrame

應用一個接受 pandas DataFrame 並輸出 pandas DataFrame 的函數。提供給該函數的 pandas DataFrame 是內部使用的批處理。

另見Transform and apply a function

注意

func 無法訪問整個輸入幀。 pandas-on-Spark 在內部將輸入係列拆分為多個批次,並在每個批次中多次調用 func。因此,諸如全局聚合之類的操作是不可能的。請參見下麵的示例。

>>> # This case does not return the length of whole frame but of the batch internally
... # used.
... def length(pdf) -> ps.DataFrame[int]:
...     return pd.DataFrame([len(pdf)])
...
>>> df = ps.DataFrame({'A': range(1000)})
>>> df.pandas_on_spark.apply_batch(length)  
    c0
0   83
1   83
2   83
...
10  83
11  83

注意

此 API 執行該函數一次以推斷可能昂貴的類型,例如,在聚合或排序後創建數據集時。

為避免這種情況,請在 func 中指定返回類型,例如,如下所示:

>>> def plus_one(x) -> ps.DataFrame[float, float]:
...     return x + 1

如果指定返回類型,則輸出列名稱變為 c0, c1, c2 … cn 。這些名稱按位置映射到 func 中返回的 DataFrame 。

要指定列名,您可以使用 pandas 友好的樣式指定它們,如下所示:

>>> def plus_one(x) -> ps.DataFrame["a": float, "b": float]:
...     return x + 1
>>> pdf = pd.DataFrame({'a': [1, 2, 3], 'b': [3, 4, 5]})
>>> def plus_one(x) -> ps.DataFrame[zip(pdf.dtypes, pdf.columns)]:
...     return x + 1

當給定函數注釋了返回類型時,DataFrame 的原始索引將丟失,並且默認索引將附加到結果 DataFrame。請謹慎配置默認索引。另請參閱Default Index Type

參數

func函數

應用於每個 pandas 框架的函數。

args元組

除了數組/係列之外,要傳遞給 func 的位置參數。

**kwds

附加關鍵字參數作為關鍵字參數傳遞給 func

返回

DataFrame

例子

>>> df = ps.DataFrame([(1, 2), (3, 4), (5, 6)], columns=['A', 'B'])
>>> df
   A  B
0  1  2
1  3  4
2  5  6
>>> def query_func(pdf) -> ps.DataFrame[int, int]:
...     return pdf.query('A == 1')
>>> df.pandas_on_spark.apply_batch(query_func)
   c0  c1
0   1   2
>>> def query_func(pdf) -> ps.DataFrame["A": int, "B": int]:
...     return pdf.query('A == 1')
>>> df.pandas_on_spark.apply_batch(query_func)
   A  B
0  1  2

您也可以省略類型提示,以便 pandas-on-Spark 推斷返回模式如下:

>>> df.pandas_on_spark.apply_batch(lambda pdf: pdf.query('A == 1'))
   A  B
0  1  2

您還可以指定額外的參數。

>>> def calculation(pdf, y, z) -> ps.DataFrame[int, int]:
...     return pdf ** y + z
>>> df.pandas_on_spark.apply_batch(calculation, args=(10,), z=20)
        c0        c1
0       21      1044
1    59069   1048596
2  9765645  60466196

您還可以使用np.ufunc 和內置函數作為輸入。

>>> df.pandas_on_spark.apply_batch(np.add, args=(10,))
    A   B
0  11  12
1  13  14
2  15  16
>>> (df * -1).pandas_on_spark.apply_batch(abs)
   A  B
0  1  2
1  3  4
2  5  6

相關用法


注:本文由純淨天空篩選整理自spark.apache.org大神的英文原創作品 pyspark.pandas.DataFrame.pandas_on_spark.apply_batch。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。