В этом ответе предполагается, что у вас есть доступ к 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|
+-------+---------------+-----+