RDD(弹性分布式数据集)有以下几种常见的创建方式:
### 从集合创建
通过`parallelize()`方法将本地集合转换为RDD。这种方式适合在测试或处理小规模数据时使用,它能将本地的Python列表、Java数组等集合数据并行化到集群上。
- **Python示例**:
```python
from pyspark import SparkContext
# 创建SparkContext对象
sc = SparkContext("local", "CreateRDDExample")
data = [1, 2, 3, 4, 5]
# 使用parallelize方法将列表转换为RDD
rdd = sc.parallelize(data)
print(rdd.collect())
sc.stop()
```
- **Java示例**:
```java
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import java.util.Arrays;
import java.util.List;
public class CreateRDDFromCollection {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("CreateRDDFromCollection").setMaster("local");
JavaSparkContext sc = new JavaSparkContext(conf);
List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);
// 使用parallelize方法将列表转换为RDD
JavaRDD<Integer> rdd = sc.parallelize(data);
System.out.println(rdd.collect());
sc.close();
}
}
```
### 从外部存储系统创建
可以从多种外部存储系统中读取数据来创建RDD,这些存储系统包括但不限于本地文件系统、Hadoop分布式文件系统(HDFS)、Amazon S3等。
- **读取本地文件**:
```python
from pyspark import SparkContext
sc = SparkContext("local", "ReadLocalFileExample")
# 读取本地文件创建RDD
rdd = sc.textFile("file:///path/to/local/file.txt")
print(rdd.take(5))
sc.stop()
```
- **读取HDFS文件**:
```python
from pyspark import SparkContext
sc = SparkContext("local", "ReadHDFSFileExample")
# 读取HDFS文件创建RDD
rdd = sc.textFile("hdfs://namenode:port/path/to/hdfs/file.txt")
print(rdd.take(5))
sc.stop()
```
### 从其他RDD转换创建
通过对已有的RDD执行转换操作(如`map`、`filter`、`flatMap`等),可以生成新的RDD。这些转换操作是惰性的,不会立即执行,只有在遇到行动操作时才会触发计算。
```python
from pyspark import SparkContext
sc = SparkContext("local", "TransformRDDExample")
data = [1, 2, 3, 4, 5]
rdd1 = sc.parallelize(data)
# 对rdd1进行map转换操作,生成新的RDD
rdd2 = rdd1.map(lambda x: x * 2)
print(rdd2.collect())
sc.stop()
```