разделить список данных в каждом столбце таблицы - PullRequest
0 голосов
/ 07 марта 2019

Возникла проблема при преобразовании данных списка во фрейм данных (таблица).У меня есть данные в списке. (Входные данные)

[['FWD, 29052016: 09: 01,10.56', 'FWD, 29052016: 10: 53,11.23', 'FWD, 29052016: 15: 40,23.20 '], [' SPOT, 29052016: 09: 04,11.56 ',' FWD, 29052016: 11: 45,11.23 ',' SPOT, 29052016: 12: 30,23.20 '], [' FWD, 29052016: 08:01,10.56 ',' SPOT, 29052016: 12: 30,11.23 ',' FWD, 29052016: 13: 20,23.20 ',' FWD, 29052016: 14: 340,56.00 '], [' FWD, 29052016: 08:01,10.56 ',' SPOT, 29052016: 12: 30,11.23 ',' FWD, 29052016: 13: 20,23.20 ']]

Ожидаемый результат: (формат таблицы) в pyspark.

FWD 29052016: 09: 01 10.56
FWD 29052016: 10: 53 11.23
SPOT 29052016: 09: 04 11.56

Я пытался, но не работал правильно.

распараллелить данные

data1 = sc.parallelize (data)

data_converted в карту

data_converted = data1.map (лямбда-x: (x [0] [2], x[1] [1], x [2] [1]))

создать таблицу (createDataFrame)

DF1 = sqlContext.createDataFrame (data_converted, схема)

получениерезультат DF1.show ()

но получаюрезультат.это не соответствует моему требованию.

Product_type |дата |время

       D|   F|   F|
       O|   F|   S|

1 Ответ

0 голосов
/ 07 марта 2019

В этом ответе предполагается, что у вас есть доступ к pyspark только в вашей среде. Кроме того, этот ответ основан на Spark 2.x и использует SparkSession (из pyspark.sql import SparkSession), однако предыдущие версии должны достигать аналогичных результатов при использовании SQLContext.

Этот ответ инициализирует контекст искры следующим образом:

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("my_app").getOrCreate()

Кроме того, я предполагаю, что ваши данные не загрязнены, и исходный текстовый файл имеет каждую строку, разделенную "|". Где каждая строка имеет одну строку, где каждое значение разделено "," в текстовом файле.

Чтение в текстовом файле и разбиение по «|» разделитель, чтобы получить его в работоспособном формате

file = open("/example.txt", "r")
data = file.read().split('|')

Затем мы должны убрать пустые пробелы и разбить строку на «,», чтобы мы получили список списков, где каждый внутренний список представляет ожидаемый вами формат из трех столбцов:

data = [x.strip().split(',') for x in data]

Это будет выглядеть примерно так (обратите внимание, что в каждой строке содержится ровно одно значение продукта, даты и времени):

[['FWD', '29052016:09:01', '10.56'], ['FWD', '29052016:10:53', '11.23']]

Если ваши данные немного запутаны, и вы обнаружите, что каждая «строка» имеет более 3 значений, вам нужно будет поработать над функциями очистки, чтобы привести их в правильный формат.

Теперь мы создадим схему для фрейма данных (для целей ответа используем строки):

from pyspark.sql.types import StructField, StructType
schema = StructType(
    [
        StructField("product", StringType(), True),
        StructField("date", StringType(), True),
        StructField("time", StringType(), True)
    ]
)

И, наконец, создайте фрейм данных spark:

dataframe = spark.createDataFrame(data, schema)

Это приводит к следующему, используя очищенную версию примера, который вы мне дали:

+-------+---------------+-----+
|product|           date| time|
+-------+---------------+-----+
|    FWD| 29052016:09:01|10.56|
|    FWD| 29052016:10:53|11.23|
|    FWD| 29052016:15:40|23.20|
|   SPOT| 29052016:09:04|11.56|
|    FWD| 29052016:11:45|11.23|
|   SPOT| 29052016:12:30|23.20|
|    FWD| 29052016:08:01|10.56|
|   SPOT| 29052016:12:30|11.23|
|    FWD| 29052016:13:20|23.20|
|    FWD|29052016:14:340|56.00|
|    FWD| 29052016:08:01|10.56|
|   SPOT| 29052016:12:30|11.23|
|    FWD| 29052016:13:20|23.20|
+-------+---------------+-----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...