[Code] cómo encontrar eliminar duplicados en Spark

La respuesta corta es

r = m.reduceByKey(lambda x,y: (x))

Pero consideremos la naturaleza conmutativa y asociativa de la función reduceByKey, asumamos los siguientes valores

  1. A
  2. B
  3. C
  4. E
  5. A
  6. A

Y asumamos que los datos pueden estar en diferentes nodos de un cluster de Hadoop

una posibilidad de ejecución puede ser 1 y 5 y su resultado evaluarlo con 6 para encontrar una sola versión de A

pero también puede suceder que se evalúe 5 y 6 y luego 1 para encontrar una sola versión de A

Esto nos lleva a un dilema en el momento de crear nuestros programas en Spark pq este modelo nos lleva a pensar más allá y resolver los problemas siempre pensando en este paradigma

De otra forma, esta es otra solución (créditos vaerek)

from pyspark.sql import Row
>>> df = sc.parallelize([ \
...     Row(name='Alice', age=5, height=80), \
...     Row(name='Alice', age=5, height=80), \
...     Row(name='Alice', age=10, height=80)]).toDF()
>>> df.dropDuplicates().show()
+---+------+-----+
|age|height| name|
+---+------+-----+
|  5|    80|Alice|
| 10|    80|Alice|
+---+------+-----+

>>> df.dropDuplicates(['name', 'height']).show()
+---+------+-----+
|age|height| name|
+---+------+-----+
|  5|    80|Alice|
+---+------+-----+

Espero sea de ayuda

FREDDY LEANDRO ANGARITA CASTELLANOS
Data platform MVP
@flacMVP

[Codigo] En SSIS error extraño al generar código

En algunos casos se quiere generar una consulta dentro SSIS para ser ejecutada por una tarea posterior (o generar cualquier texto en general), normalmente se usa algo como una tarea SQL para realizar dicho trabajo, la consulta sería algo así

declare @Consulta nvarchar(max) 

SET @Consulta = 'select ''A'''

select @Consulta

Creamos una tarea SQL con la siguiente configuración

 

 ResultSet: Single Row SQL Statement: declare @Consulta nvarchar(100) SET @Consulta = 'select ''A''' select @Consulta
Configuración

 

 

ResultaName: 0 y en Variable Name: User::Resultado
Configuración Tarea2

 

 

 

Se asume:

  • Se creó la variable con nombre Resultado de tipo String
  • Se tiene una conexión OLEDB hacia Sql Server

Al ejecutar el paquete se encuentra el siguiente mensaje de error

[Execute SQL Task] Error: An error occurred while assigning a value to variable "Resultado": "The type of the value (DBNull) being assigned to variable "User::Resultado" differs from the current variable type (String). Variables may not change type during execution. Variable types are strict, except for variables of type Object.
".

Se puede pasar un tiempo importante buscando la causa del error y al ejecutar la consulta la misma retorna el resultado esperado al ejecutarla en el SSMS

El problema es el manejo de SSIS tiene de los tipos de datos varchar(max), nvarchar(max), si el código se cambia por

declare @Consulta nvarchar(100) 

SET @Consulta = 'select ''A'''

select @Consulta

Y se ejecuta de nuevo, el error desaparece

Espero sea de ayuda

FREDDY LEANDRO ANGARITA CASTELLANOS
Data platform MVP
@flacMVP