Значение ключа словаря Python в dataframe, где предложение в Pyspark - PullRequest
0 голосов
/ 21 ноября 2018

Как передать значение ключа словаря Python в фрейм данных where в Pyspark ...

Словарь Python, как показано ниже ...

column_dict= { 'email': 'customer_email_addr' ,
               'addr_bill': 'crq_st_addr' ,
               'addr_ship': 'ship_to_addr' ,
               'zip_bill': 'crq_zip_cd' ,
               'zip_ship':  'ship_to_zip' ,
               'phone_bill': 'crq_cm_phone' ,
               'phone_ship' : 'ship_to_phone'}

У меня есть искровой фрейм данных соколо 3 миллиардов записей.Структура данных выглядит следующим образом ...

source_sql= ("select cust_id, customer_email_addr, crq_st_addr, ship_to_addr,
 crq_zip_cd,ship_to_zip,crq_cm_phone,ship_to_phone from odl.cust_master  where
 trans_dt >= '{}' and trans_dt <= '{}' ").format('2017-11-01','2018-10-31')

cust_id_m = hiveCtx.sql(source_sql)
cust_id.cache()

Мое намерение выяснить конкретных действительных клиентов для электронной почты, адреса, почтового индекса и телефона и работать в цикле для вышеуказанных ключей словаря.Для этого, когда я тестирую спарк-оболочку для одного значения ключа, как показано ниже ...

>>> cust_id_risk_m=cust_id_m.selectExpr("cust_id").where( 
("cust_id_m.'{}'").format(column_dict['email'])  != ''  ).distinct()

Я получаю сообщение об ошибке ... Требуется помощь экспертов в решении этой проблемы.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/mapr/spark/spark-2.1.0/python/pyspark/sql/dataframe.py", line 1026, in filter
    raise TypeError("condition should be string or Column")
TypeError: condition should be string or Column

1 Ответ

0 голосов
/ 14 декабря 2018

Можете ли вы попробовать использовать метод get в вашем словаре?Я проверил это на приведенном ниже кадре данных как:

df =spark.sql("select emp_id, emp_name, emp_city,emp_salary from udb.emp_table  where emp_joining_date >= '{}' ".format(2018-12-05))

>>> df.show(truncate=False)
+------+----------------------+--------+----------+
|emp_id|emp_name              |emp_city|emp_salary|
+------+----------------------+--------+----------+
|1     |VIKRANT SINGH RANA    |NOIDA   |10000     |
|3     |GOVIND NIMBHAL        |DWARKA  |92000     |
|2     |RAGHVENDRA KUMAR GUPTA|GURGAON |50000     |
+------+----------------------+--------+----------+

thedict={"CITY":"NOIDA"}

>>> newdf = df.selectExpr("emp_id").where("emp_city ='{}'".format(thedict.get('CITY'))).distinct()
>>> newdf.show();
+------+
|emp_id|
+------+
|     1|
+------+

или вы можете поделиться своими образцами данных для своего кадра данных?

...