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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。