умножить столбец массива pyspark на скаляр - PullRequest
1 голос
/ 19 июня 2020

Я пытаюсь умножить столбец типа массива на скаляр. Этот скаляр также является значением из того же фрейма данных pyspark.

например, у меня есть такой фрейм данных:

df = sc.parallelize([([1, 2],3)]).toDF(["l","factor"])
+------+------+
|     l|factor|
+------+------+
|[1, 2]|     3|
+------+------+

Я хочу достичь этого:

+------+------+
|     l|factor|
+------+------+
|[3, 6]|     3|
+------+------+

Это то, что я пробовал:

df.withColumn("l", lit("factor") * df.l)

Но он возвращает ошибку несоответствия типа. Как я могу умножить столбец типа массива на число?

1 Ответ

2 голосов
/ 19 июня 2020

От spark-2.4 используйте transform

spark.sql(""" select l, factor, transform(l,x -> x * factor) as result from tmp """).show(10,False)
#+------+------+------+
#|l     |factor|result|
#+------+------+------+
#|[1, 2]|3     |[3, 6]|
#+------+------+------+

Используя dataframe API:

df.withColumn("res",expr("""transform(l,x -> x*factor)""")).show()
#+------+------+------+
#|     l|factor|   res|
#+------+------+------+
#|[1, 2]|     3|[3, 6]|
#+------+------+------+
...