Я хочу взять отдельное значение столбца из DataFrame A и передать его в функцию разнесения DataFrame B, чтобы создать повторяющиеся строки (DataFrameB) для каждого отдельного значения.

distinctSet = targetDf.select('utilityId').distinct())

utilisationFrequencyTable = utilisationFrequencyTable.withColumn("utilityId", psf.explode(assign_utilityId()))

Функция

assign_utilityId = psf.udf(
    lambda id: [x for x in id],
    ArrayType(LongType()))

Как передать значения distinctSet в assign_utilityId

Обновить

+---------+
|utilityId| 
+---------+
|      101|
|      101|
|      102|
+---------+

+-----+------+--------+
|index|status|timeSlot|
+-----+------+--------+
|    0|   SUN|       0|
|    0|   SUN|       1| 

Я хочу взять уникальное значение из Dataframe 1 и создать новый столбец в dataFrame 2. Как это

+-----+------+--------+--------+
|index|status|timeSlot|utilityId
+-----+------+--------+--------+
|    0|   SUN|       0|101
|    0|   SUN|       1|101 
|    0|   SUN|       0|102
|    0|   SUN|       1|102
0
syv 14 Мар 2018 в 06:56

2 ответа

Лучший ответ

Для этого нам не нужен udf. Я пробовал ввести некоторые данные, проверьте

>>> from pyspark.sql import function as F

>>> df = spark.createDataFrame([(1,),(2,),(3,),(2,),(3,)],['col1'])
>>> df.show()
+----+
|col1|
+----+
|   1|
|   2|
|   3|
|   2|
|   3|
+----+

>>> df1 = spark.createDataFrame([(1,2),(2,3),(3,4)],['col1','col2'])
>>> df1.show()
+----+----+
|col1|col2|
+----+----+
|   1|   2|
|   2|   3|
|   3|   4|
+----+----+

>>> dist_val = df.select(F.collect_set('col1').alias('val')).first()['val']
>>> dist_val
[1, 2, 3]

>>> df1 = df1.withColumn('col3',F.array([F.lit(x) for x in dist_val]))
>>> df1.show()
+----+----+---------+
|col1|col2|     col3|
+----+----+---------+
|   1|   2|[1, 2, 3]|
|   2|   3|[1, 2, 3]|
|   3|   4|[1, 2, 3]|
+----+----+---------+
>>> df1.select("*",F.explode('col3').alias('expl_col')).drop('col3').show()
+----+----+--------+
|col1|col2|expl_col|
+----+----+--------+
|   1|   2|       1|
|   1|   2|       2|
|   1|   2|       3|
|   2|   3|       1|
|   2|   3|       2|
|   2|   3|       3|
|   3|   4|       1|
|   3|   4|       2|
|   3|   4|       3|
+----+----+--------+
1
Suresh 14 Мар 2018 в 07:15
df = sqlContext.createDataFrame(sc.parallelize([(101,),(101,),(102,)]),['utilityId'])
df2 = sqlContext.createDataFrame(sc.parallelize([(0,'SUN',0),(0,'SUN',1)]),['index','status','timeSlot'])
rdf = df.distinct()


>>> df2.join(rdf).show()
+-----+------+--------+---------+                                               
|index|status|timeSlot|utilityId|
+-----+------+--------+---------+
|    0|   SUN|       0|      101|
|    0|   SUN|       0|      102|
|    0|   SUN|       1|      101|
|    0|   SUN|       1|      102|
+-----+------+--------+---------+
0
Bala 14 Мар 2018 в 07:45