Как обрабатывать CSV-файл, в котором данные столбца адреса разделяются запятой как один столбец вместо нескольких столбцов в Spark - PullRequest
0 голосов
/ 25 апреля 2020

Если у меня есть входящие данные для поля адреса в файле CSV, разделенного запятой (','), как я могу обработать это в Spark? Если я хочу, чтобы эти данные были записаны в мой адресный столбец.

Пример. Предположим, у меня есть входные данные в виде файла CSV, как показано ниже,

Bob,Delhi,NCR,8984124789
Scott,Bangalore,Karnataka,9040788301
Robert,Andheri,Mumbai,Maharastra,9338075922

Я хочу получить окончательный кадр данных,

Name   Address                    MobileNo
Bob    Delhi,NCR                  8984124789
Scott  Bangalore,Karnataka        9040788301
Robert Andheri,Mumbai,Maharastra  9338075922

Как мы можем справиться с этим в Spark?

1 Ответ

3 голосов
/ 25 апреля 2020

Вы можете использовать СДР для очистки данных перед созданием из них фрейма данных:

rdd = sc.textFile('path-to-csv.csv')

Затем очистите его, сдвинув последний столбец, чтобы выделить данные Address в конец строки:

df = rdd.map(lambda l: l.split(','))\
        .map(lambda l: Row(Name=l[0],Mobile=l[-1],Address=', '.join(l[1:-1])))\
        .toDF()

И для явного задания схемы:

df = rdd.map(lambda l: l.split(','))\
    .map(lambda l: Row(Name=l[0],MobileNo=l[-1],Address=', '.join(l[1:-1])))\
    .toDF(schema=StructType(fields=[StructField('Name',StringType()),
                                    StructField('Address', StringType()),
                                    StructField('MobileNo', StringType())]))

Результат:

+------+---------------------------+----------+
|Name  |Address                    |MobileNo  |
+------+---------------------------+----------+
|Bob   |Delhi, NCR                 |8984124789|
|Scott |Bangalore, Karnataka       |9040788301|
|Robert|Andheri, Mumbai, Maharastra|9338075922|
+------+---------------------------+----------+
...