Писпарк |Отделить значения строки / int от фрейма данных - PullRequest
0 голосов
/ 21 мая 2018

У меня есть Spark Dataframe, как показано ниже:

+---------+
|col_str_1|
+---------+
|     1|
|     2|
|     3|
|     4|
|     5|
|     6|
|     7|
|     8|
|     9|
|     a|
|     b|
|     c|
|     d|
|     e|
|     f|
|     g|
|     h|
|     1|
|     2|
|   3.0|
+---------+

Я хочу отделить значения строки / int / float на основе запроса

Например: Req для STRING, вернуть DFдолжно быть как показано ниже

+---------+
|col_str_1|
+---------+
|     a|
|     b|
|     c|
|     d|
|     e|
|     f|
|     g|
|     h|
+---------+

Req для целых чисел, обратный DF должен быть как ниже

+---------+
|col_str_1|
+---------+
|     1|
|     2|
|     3|
|     4|
|     5|
|     6|
|     7|
|     8|
|     9|
|     1|
|     2|
+---------+

Попробовал следующие шаги:

>> df = sqlContext.sql('select * from --db--.vt_prof_test') 
>> columns = df.columns[0]
>> df.select(columns).????

как продолжить, либо используйте фильтр или карту, кто-нибудь может мне помочь ??

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете выбрать udf

import pyspark.sql.functions as F
df = sqlContext.sql('select * from --db--.vt_prof_test') 

REQUEST = 'STRING'
request_bc = sc.broadcast(REQUEST)

def check_value(val):
    if request_bc.value == 'STRING':
        try:
            val = int(val)
            return None
        except:
            return val
    if request_bc.value == 'INTEGER':
        try:
            val = int(val)
            return val
        except:
            return None

check_udf = F.udf(lambda x: check_value(x))

df = df.select(check_udf(F.col('col_str_1').alias('col_str_1')).dropna()

Установить параметр REQUEST в соответствии с необходимостью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...