Как умножить два столбца в кадре данных искры - PullRequest
0 голосов
/ 23 февраля 2019

Скажем, у меня есть фрейм данных с именем "orderitems" со схемой ниже

    DataFrame[order_item_id: int, order_item_order_id: int, order_item_product_id: int, order_item_quantity: int, order_item_subtotal: float, order_item_product_price: float]

Итак, для проверки качества данных мне нужно убедиться, что все строки удовлетворяют формуле: order_item_subtotal =(order_item_quantity * order_item_product_price) .Для этого мне нужно добавить отдельный столбец с именем «valid», который должен иметь «Y» в качестве значения для всех тех строк, которые удовлетворяют приведенной выше формуле, а для всех остальных строк он должен иметь «N» в качестве значения.Я решил использовать when () и else () вместе с методом withColumn (), как показано ниже.

    orderitems.withColumn("valid",when(orderitems.order_item_subtotal != (orderitems.order_item_product_price * orderitems.order_item_quantity),'N').otherwise("Y"))

Но он возвращает меня ниже Ошибка:

    TypeError: 'Column' object is not callable

Я знаю, что это произошлопотому что я пытался умножить два объекта столбца.Но я не уверен, как решить эту проблему, так как я все еще нахожусь в процессе изучения искры.Я хотел бы знать, как это исправить.Я использую Spark 2.3.0 с Python

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

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

def check(subtotal, item_quantity, item_product_price):
  if subtotal == (item_quantity * item_product_price):
    return "Y"
  else:
    return "N"

validate = udf(check)

orderitems = orderitems.withColumn("valid", validate("order_item_subtotal", "order_item_quantity", "order_item_product_price"))
0 голосов
/ 23 февраля 2019

Попробуйте что-то вроде этого:

from pyspark.sql.functions import col,when
orderitems.withColumn("valid",
          when(col("order_item_subtotal") != (col("order_item_product_price") * col("order_item_quantity")),"N")
          .otherwise("Y")).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...