PySpark SparkContext 的 parallelize(~)
方法根據給定數據集創建 RDD(彈性分布式數據集)。
參數
1. c
| any
要轉換為 RDD 的數據。通常,您會傳遞一個值列表。
2. numSlices
| int
| optional
要使用的分區數。默認情況下,Spark 配置中設置的並行級別將用於分區數量:
sc.defaultParallelism # For my configs, this is set to 8
8
返回值
PySpark RDD (pyspark.rdd.RDD
)。
例子
使用值列表創建 RDD
要創建 RDD,請使用 parallelize(~)
函數:
rdd = sc.parallelize(["A","B","C","A"])
rdd.collect()
['A', 'B', 'C', 'A']
我的 Spark 配置指定的默認分區數是:
rdd.getNumPartitions()
8
創建具有特定數量分區的 RDD
要使用具有 3
分區的列表創建 RDD:
rdd = sc.parallelize(["A","B","C","A"], numSlices=3)
rdd.collect()
['A', 'B', 'C', 'A']
在這裏,Spark 將我們的列表分為 3 個sub-datasets。我們可以使用 glom()
方法查看每個分區的內容:
rdd.glom().collect()
[['A'], ['B'], ['C', 'A']]
我們確實可以看到有3個分區:
-
分區一:
'A'
-
分區二:
'B'
-
分區三:
'C'
和'A'
請注意,相同的值 'A'
不一定會出現在同一個分區中 - 分區是根據列表的順序簡單完成的。
創建一對 RDD
要創建 RDD 對,請傳遞元組列表,如下所示:
rdd = sc.parallelize([("A",1),("B",1),("C",1),("A",1)], numSlices=3)
rdd.collect()
[('A', 1), ('B', 1), ('C', 1), ('A', 1)]
請注意,parallelize 不會根據鍵執行分區,如下所示:
rdd.glom().collect()
[[('A', 1)], [('B', 1)], [('C', 1), ('A', 1)]]
我們可以看到,就像前麵的情況一樣,分區是使用列表的順序完成的。
注意
一對 RDD 本身並不是一種類型:
type(rdd)
pyspark.rdd.RDD
RDD 對的特殊之處在於,我們可以執行其他方法,例如 reduceByKey(~)
,它對鍵執行 groupby
並執行自定義縮減函數:
rdd = sc.parallelize([("A",1),("B",1),("C",1),("A",1)], numSlices=3)
new_rdd = rdd.reduceByKey(lambda a,b: a+b)
new_rdd.collect()
[('B', 1), ('C', 1), ('A', 2)]
這裏,我們使用的歸約函數是一個簡單的求和。
從 Pandas 創建 RDD DataFrame
考慮以下 Pandas DataFrame:
import pandas as pd
df_pandas = pd.DataFrame({"A":[3,4],"B":[5,6]})
df_pandas
A B
0 3 5
1 4 6
要創建包含此 Pandas DataFrame 值的 RDD:
df_spark = spark.createDataFrame(df_pandas)
rdd = df_spark.rdd
rdd.collect()
[Row(A=3, B=5), Row(A=4, B=6)]
請注意如何僅保留 DataFrame 的值 - 列標簽不包含在 RDD 中。
警告
盡管 parallelize(~)
可以直接接受 Pandas DataFrame,但這並沒有給我們所需的 RDD:
import pandas as pd
df_pandas = pd.DataFrame({"A":[3,4],"B":[5,6]})
rdd = sc.parallelize(df_pandas)
rdd.collect()
['A', 'B']
如您所見,rdd
僅包含列標簽,但不包含數據本身。
相關用法
- Python PySpark SparkSession range方法用法及代碼示例
- Python PySpark SparkSession createDataFrame方法用法及代碼示例
- Python Django SpatialReference用法及代碼示例
- Python Django SpatialReference.__getitem__用法及代碼示例
- Python Django SplitArrayField.remove_trailing_nulls用法及代碼示例
- Python String count方法用法及代碼示例
- Python Scipy integrate.quadrature()用法及代碼示例
- Python Pandas Series str extractall方法用法及代碼示例
- Python Scipy stats.hypsecant.moment()用法及代碼示例
- Python Pandas Series str split方法用法及代碼示例
- Python String isnumeric方法用法及代碼示例
- Python String Center()用法及代碼示例
- Python Django SimpleTestCase.client用法及代碼示例
- Python Pandas Series to_list方法用法及代碼示例
- Python Django Signal用法及代碼示例
- Python String zfill方法用法及代碼示例
- Python String rstrip方法用法及代碼示例
- Python Scipy stats.hypsecant.median()用法及代碼示例
- Python Sympy Ellipse.equation()用法及代碼示例
- Python String decode()用法及代碼示例
- Python String轉Binary用法及代碼示例
- Python String count()用法及代碼示例
- Python Scipy stats.halfgennorm.fit()用法及代碼示例
- Python Tableau Server用法及代碼示例
- Python Sympy encloses_point()用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 PySpark SparkContext | parallelize method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。