apache-spark google-cloud-dataproc

apache spark - spark.sql.crossJoin.enabled para Spark 2.x



apache-spark google-cloud-dataproc (3)

Estoy usando la ''vista previa'' de Google DataProc Image 1.1 con Spark 2.0.0. Para completar una de mis operaciones, tengo que completar un producto cartesiano. Desde la versión 2.0.0 se ha creado un parámetro de configuración de chispa (spark.sql.cross Join.enabled) que prohíbe los productos cartesianos y se genera una excepción. ¿Cómo puedo configurar spark.sql.crossJoin.enabled = true, preferiblemente mediante una acción de inicialización? spark.sql.crossJoin.enabled=true


Los puntos de referencia del conjunto de consultas TPCDS tienen consultas que contienen CROSS JOINS y, a menos que escriba explícitamente CROSS JOIN o establezca dinámicamente la propiedad predeterminada de Spark en verdadero Spark.conf.set("spark.sql.crossJoin.enabled", true) se encontrará con una excepción error.

El error aparece en las consultas TPCDS 28,61, 88 y 90 porque la sintaxis de consulta original del Comité de procesamiento de transacciones (TPC) contiene comas y la operación de unión predeterminada de Spark es una unión interna. Mi equipo también decidió usar CROSS JOIN en lugar de cambiar las propiedades predeterminadas de Spark.


Para cambiar los valores predeterminados de los ajustes de configuración en Dataproc, ni siquiera necesita una acción de inicio, puede usar el indicador --properties al crear su clúster desde la línea de comandos:

gcloud dataproc clusters create --properties spark:spark.sql.crossJoin.enabled=true my-cluster ...


Spark 2.1+

Puedes usar crossJoin :

df1.crossJoin(df2)

Hace explícita su intención y mantiene una configuración más conservadora para protegerlo de uniones cruzadas no intencionadas.

Spark 2.0

Las propiedades de SQL se pueden establecer dinámicamente en tiempo de ejecución con el método RuntimeConfig.set , por lo que debería poder llamar

spark.conf.set("spark.sql.crossJoin.enabled", true)

siempre que desee permitir explícitamente el producto cartesiano.