pyspark chispa de inicio rápido versión perezoso

pyspark chispa de inicio rápido versión perezoso

instalar

la instalación ventana acoplable

La más sencilla es la ventana acoplable directa, hay unos pocos aspecto más rápida en la referencia de instalación:

Si se simplifica aún más, a continuación, seleccione Instalar la versión independiente de chispa, no se basan hadoop

Después de que la instalación se haya completado, puede iniciar la secuencia de comandos sbin

    ./start-all.sh

Interfaz efecto que la banda (hay dos trabajadores):
2020-04-05-10-30-43

Nota:
Puesto que la imagen de base anterior usando un openjdk ventana acoplable: 8-alpino, Scala entorno más adecuado, python3 pyspark necesario, a fin de mantener Dockerfile, instalación adicional python3 proceso

web oficial para descarga directa bin
https://spark.apache.org/downloads.html

ejemplo de ejecución

La más directa en la instalación de host de destino, la operación, (si no, sustituir localhost al anfitrión chispa)

    # Run a Python application on a Spark standalone cluster
    ./bin/spark-submit \
    --master spark://localhost:7077 \
    examples/src/main/python/pi.py \
    1000

CPU Observación, utilizando una pluralidad de núcleos

pyspark

    ./bin/pyspark    

Ejecutar pyspark de recuento de palabras (holamundo)

    >>> p='/usr/local/spark/README.md'
    >>> text_file = sc.textFile(p)
    >>> counts = text_file.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
    >>> counts
    PythonRDD[6] at RDD at PythonRDD.scala:53
    >>> counts.collect()
    [Stage 0:>                                                          (0 + 2) / 2]/usr/local/spark/python/lib/pyspark.zip/pyspark/shuffle.py:60: UserWarning: Please install psutil to have better support with spilling
    /usr/local/spark/python/lib/pyspark.zip/pyspark/shuffle.py:60: UserWarning: Please install psutil to have better support with spilling
    [('#', 1), ('Apache', 1), ('Spark', 15), ('', 73), ('is', 7), ('unified', 1), ('analytics', 1), ('engine', 2), ('It', 2), ('provides', 1), ('high-level', 1), ('APIs', 1), ('in', 6), ('Scala,', 1), ('Java,', 1), ('an', 4), ('optimized', 1), ('supports', 2), ('computation', 1), ('analysis.', 1), ('set', 2), ('of', 5), ('tools', 1), ('SQL', 2 
    ...

notas:

  • RDD cuenta el tipo de datos es
  • recuentos = text_file.flatMap. (línea lambda: linea.split ( "")) mapa (lambda palabra: (word, 1)) reduceByKey (lambda a, b: a + b). cuando no hay carrera real, count.collect () cuando se está ejecutando tareas.
    Esta es la característica de encendido: cuando es necesario utilizar variables reales antes de ejecutar
  • variable de sc se inicializa automáticamente después de comenzar pyspark

RDD (elástico conjunto de datos distribuida)

RDD 是提供一直操作collection里面每个元素的方法,该方法可以在集群的各个node 并行运行。

例子教程:

Nota: Esto parece un RDD trama de datos útiles (además de la cruz-nodo de computación paralela), que es una trama de datos de chispa, pero la sintaxis real de trama de datos pandas no son lo mismo.

Esto plantea un problema, tengo que volver a aprender su uso familiar.
Para resolver este problema, databricks comunidad tiene un programa koalas

Después de usar esto, se puede convertir a la clase A pandas comunes están familiarizados con el proceso de la trama de datos

    kdf = ks.from_pandas(pdf) #pandas的dataframe -> koalas
    kdf = sdf.to_koalas() # spark dataframe ->koalas的dataframe

referencia:

Enviar trabajos

上面最简单的例子是提交一个python 文件到spark , 但实际我们需要多个files ,并且有依赖,事实上这里比较多坑
  • El más simple se basan Ejemplo 1 - n caso de dependencia de terceros:
    [klg@ira-r740 wade-test]$ ls
    application   requirements.txt  t.py  
    [klg@ira-r740 wade-test]$ tree application
    application
    └── myfile.py

    0 directories, 1 file
    

t.py

from pyspark.sql import SparkSession
SPARK_MASTER_HOST = 'ira-r740'
SPARK_MASTER_PORT = 7077
def test(x):
    from application.myfile import simple_function
    return simple_function(x)

if __name__ == "__main__":
    spark = SparkSession\
        .builder\
        .config('spark.master', 'spark://{spark_master_host}:{spark_master_port}' \
        .format(spark_master_host=SPARK_MASTER_HOST, spark_master_port=SPARK_MASTER_PORT)) \
        .appName("PythonPiwade")\
        .getOrCreate()

    # test by mapping function over RDD
    rdd = spark.sparkContext.parallelize(range(1,100))
    result = rdd.map(lambda x: test(x)).collect()
    print("result", result)
    spark.stop()

En primer lugar la compresión, la sumisión

    $cd wade-test
    $zip -rq application.zip 
    $./bin/spark-submit   --py-files /home/klg/pyspark/wade-test/application.zip  /home/klg/pyspark/wade-test/t.py
  • El ejemplo más simple de dependientes - dependiente sobre el caso de un tercero

t.py

...   
if __name__ == "__main__":
    ...
    rdd = spark.sparkContext.parallelize(range(1,100))
    result = rdd.map(lambda x: test(x)).collect()
    print("result", result)
    import bs4 ### 变动在这里
    print(bs4.__version__) ### 变动在这里
    spark.stop()

[KLG @ IRA-R740-Wade el Test] $ ls
la aplicación application.zip requirements.txt t.py Venv venv.zip
primera compresión, presentación

    $cd wade-test
    $python3 -m venv venv # 建立虚拟环境
    $source venv/bin/activate
    $pip install -r requirements.txt
    $zip -rq venv.zip venv # 打包依赖
    $export PYSPARK_PYTHON="venv/bin/python"
    $spark-submit \
    --name "Sample Spark Application" \
    --conf "spark.yarn.appMasterEnv.SPARK_HOME=$SPARK_HOME" \
    --conf "spark.yarn.appMasterEnv.PYSPARK_PYTHON=$PYSPARK_PYTHON" \
    --archives "venv.zip#venv" \
    --py-files "application.zip" \
    t.py

Nota: Hay un comando de exportación PYSPARK_PYTHON = "Venv / bin / python", especifica variables de PYSPARK_PYTHON especificados a la ruta de pitón tiempo de ejecución, el paquete dependiente de la trayectoria. dependencias de lo contrario no será encontrado

  • El ejemplo más simple de dependientes - dependiente sobre el caso de un tercero (solución recomendada), la negligencia es una repetición múltiple de trabajo según sea necesario. Ver su equilibrio, para los perezosos de inicio rápido:

    • Sólo una pequeña cantidad en un caso en el que incluso un trabajador o los conjuntos de los trabajadores, montados directamente en la chispa de acogida
    • Después de la instalación se basa informó directamente PIP3 instalar requirements.txt -r se ejecuta en el host

Más Referencia: https://github.com/massmutual/sample-pyspark-application

Ejemplos prácticos

csv procesamiento:

csv.py

import pandas as pd

SPARK_MASTER_HOST = 'ira-r740'
SPARK_MASTER_PORT = 7077
spark = SparkSession\
    .builder\
    .config('spark.master', 'spark://{spark_master_host}:{spark_master_port}' \
      .format(spark_master_host=SPARK_MASTER_HOST, spark_master_port=SPARK_MASTER_PORT)) \
    .appName("PythonSmsWade")\
    .getOrCreate()

def trs2(x):
    try:
        if( x and (x['smsContent'] )):
            return (str(x['smsContent']).upper(),0)
        else:
            return ('',-1)
    except Exception as e:
        return ('',-1)
    
  
#normal quick way
df1=(spark.read.format("csv").options(header="true").load("/home/klg/pyspark/py/100k.csv")) #normal
result=spark.sparkContext.parallelize(df1.collect()).map(lambda x: trs2(x)).collect()
print(len(result))    

(Enviado simplificado), después de ajustar la variable de entorno de la ruta chispa
$ chispa presentar csv.py

Nota:
La mayor parte de la página web oficial de la ruta del archivo de ejemplo es hdfs, perezoso aquí con el fin de simplificar, simplificar la estructura, no depende de almacenamiento distribuido colmena, archivo pueden tener tales opciones:

  • copiar máquina para el trabajador respectivo
  • Leer desde la db (recomendado)
  • Después de una máquina de otro trabajador de montar en el directorio (recomendado)

Necesitamos equilibrar el punto: no hay uso de la ventaja de almacenamiento distribuido para la velocidad, pero la mayoría de la caja próxima vez tenemos que tratar es el de la CPU de cómputo de tiempo de varios núcleos.

Leer datos de db
import pandas as pd
def test2( x):
    # method 1 : we reinit the var here , simple
    # method 2 : we use global share var  
    from pymongo import MongoClient
    client = MongoClient()
    client = MongoClient('10.10.20.60', 31111)
    query = {}
    docs = list(client['cash_loan']['user'].find(query).limit(200).skip(x*10))
    # do the job 
    # ...
    return docs 

SPARK_MASTER_HOST = 'ira-r740'
SPARK_MASTER_PORT = 7077
spark = SparkSession\
    .builder\
    .config('spark.master', 'spark://{spark_master_host}:{spark_master_port}' \
      .format(spark_master_host=SPARK_MASTER_HOST, spark_master_port=SPARK_MASTER_PORT)) \
    .appName("Pythonsmswade")\
    .getOrCreate()

n=5
result=spark.sparkContext.parallelize(range(1,n)).map(lambda x: test2(x)).collect()

nota:

  • El retorno podría ser la lista de la lista si la lista de retorno test2 [límite] * [n] (que, como test2 lista Método de valor de retorno)
  • En test2 renovar las variables iniciales MongoClient, con el fin de evitar un problema global, variables compartidas

Las variables globales (variables compartidas)

To be continue...

Esos años de foso escalonado

To be continue...

Supongo que te gusta

Origin www.cnblogs.com/no7dw/p/12636488.html
Recomendado
Clasificación