[Python] Cálculo de datos PySpark② (método RDD#flatMap | sintaxis RDD#flatMap | ejemplo de código)





1. Método RDD#flatMap




1. Introducción del método RDD#flatMap


El método RDD#map puede procesar los elementos de datos en el RDD uno por uno, y la lógica de procesamiento debe pasarse a la función de mapa a través de parámetros externos;

El método RDD#flatMap se basa en el método RDD#map, añadiendo la función de "desanidación";

El método RDD#flatMap también recibe una función como parámetro, que se aplica a cada elemento del RDD y sus subelementos anidados, y devuelve un nuevo objeto RDD;


2. Desanidación


Significado no anidado: en la lista a continuación, cada elemento es una lista;

lst = [[1, 2], [3, 4, 5], [6, 7, 8]]

Si la lista anterior no está anidada , la nueva lista es la siguiente:

lst = [1, 2, 3, 4, 5, 6, 7, 8]

El método RDD#flatMap primero procesa cada elemento en el RDD y luego aplana el resultado del cálculo en un nuevo objeto RDD, es decir, anida;

De esta forma, cada elemento del objeto RDD original se corresponde con varios elementos del nuevo objeto RDD;


3. Descripción de sintaxis de RDD#flatMap


Descripción de la sintaxis de RDD#flatMap:

newRDD = oldRDD.flatMap(lambda x: [element1, element2, ...])

En el antiguo objeto RDD oldRDD, cada elemento aplica una función lambda, que devuelve varios elementos, y los elementos múltiples devueltos se aplanarán en el nuevo objeto RDD newRDD;


Ejemplo de código:

# 将 字符串列表 转为 RDD 对象
rdd = sparkContext.parallelize(["Tom 18", "Jerry 12", "Jack 21"])

# 应用 map 操作,将每个元素 按照空格 拆分
rdd2 = rdd.flatMap(lambda element: element.split(" "))




2. Ejemplo de código: método RDD#flatMap



Ejemplo de código:

"""
PySpark 数据处理
"""

# 导入 PySpark 相关包
from pyspark import SparkConf, SparkContext
# 为 PySpark 配置 Python 解释器
import os
os.environ['PYSPARK_PYTHON'] = "Y:/002_WorkSpace/PycharmProjects/pythonProject/venv/Scripts/python.exe"

# 创建 SparkConf 实例对象 , 该对象用于配置 Spark 任务
# setMaster("local[*]") 表示在单机模式下 本机运行
# setAppName("hello_spark") 是给 Spark 程序起一个名字
sparkConf = SparkConf() \
    .setMaster("local[*]") \
    .setAppName("hello_spark")

# 创建 PySpark 执行环境 入口对象
sparkContext = SparkContext(conf=sparkConf)

# 打印 PySpark 版本号
print("PySpark 版本号 : ", sparkContext.version)

# 将 字符串列表 转为 RDD 对象
rdd = sparkContext.parallelize(["Tom 18", "Jerry 12", "Jack 21"])

# 应用 map 操作,将每个元素 按照空格 拆分
rdd2 = rdd.flatMap(lambda element: element.split(" "))

# 打印新的 RDD 中的内容
print(rdd2.collect())

# 停止 PySpark 程序
sparkContext.stop()

Resultados de la :

Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
23/07/31 23:02:58 WARN Shell: Did not find winutils.exe: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
23/07/31 23:02:59 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
PySpark 版本号 :  3.4.1
['Tom', '18', 'Jerry', '12', 'Jack', '21']

Process finished with exit code 0

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/han1202012/article/details/132030548
Recomendado
Clasificación