Hay tres propiedades en mi spark-defaults.conf que quiero poder configurar dinámicamente:
spark.driver.maxResultSizespark.hadoop.fs.s3a.access.keyspark.hadoop.fs.s3a.secret.keyAquí está mi intento de hacerlo:
from pyspark import SparkConf from pyspark.sql import SparkSession conf = (SparkConf() .setMaster(spark_master) .setAppName(app_name) .set('spark.driver.maxResultSize', '5g') .set('spark.hadoop.fs.s3a.access.key', '<access>')\ .set('spark.hadoop.fs.s3a.secret.key', '<secret>) ) spark = SparkSession.builder.\ config(conf=conf).\ getOrCreate() print(spark.conf.get('spark.driver.maxResultSize')) print(spark.conf.get('spark.hadoop.fs.s3a.access.key')) print(spark.conf.get('spark.hadoop.fs.s3a.secret.key')) spark.stop()Aquí está la salida que obtengo:
5g <access> <secret>Sin embargo, cuando intento leer un archivo csv en S3 usando esta configuración, aparece un error de permisos denegados.
Si configuro las credenciales a través de variables de entorno, puedo leer el archivo.
¿Por qué Hadoop no respeta las credenciales especificadas de esta manera?
Actualizar:
Conozco otras preguntas y respuestas relacionadas con la configuración de las propiedades de Hadoop en pyspark.
Aquí estoy tratando de registrar para la posteridad cómo puede ser engañado para que piense que puede configurarlos dinámicamente a través spark.hadoop.* , ya que ese es el nombre que usa para configurar estas propiedades en spark-defaults.conf , y dado que no No obtendrá un error directamente cuando intente configurarlos de esta manera.
Muchos sitios le dicen que "establezca la propiedad spark.hadoop.fs.s3a.access.key ", pero no especifique que este solo sea el caso si lo configura estáticamente en spark-defaults.conf y no dinámicamente en pyspark .
Resulta que no puede especificar las propiedades de Hadoop a través de:
spark.conf.set('spark.hadoop.<property>', <value>)
pero en su lugar debe utilizar:
spark.sparkContext._jsc.hadoopConfiguration().set('<property>', <value>)
Creo que solo puede usar spark.conf.set() para las propiedades enumeradas en la página Configuración de Spark .