Я только изучаю Spark, начал с RDD и теперь перехожу к DataFrames. В моем текущем проекте pyspark я читаю файл S3 в RDD и выполняю некоторые простые преобразования для них. Вот код
segmentsRDD = sc.textFile(fileLocation). \
filter(lambda line: line.split(",")[6] in INCLUDE_SITES). \
filter(lambda line: line.split(",")[2] not in EXCLUDE_MARKETS). \
filter(lambda line: "null" not in line). \
map(splitComma). \
filter(lambda line: line.split(",")[5] == '1')
SplitComma - это функция, которая выполняет некоторые вычисления даты для данных строки и возвращает обратно 10 полей, разделенных запятыми. Как только я получаю, что я запускаю последний фильтр, как показано, только для тех строк извлечения, где значение в поле [5] = 1. Пока все в порядке.
Далее, я хотел бы преобразовать сегменты RDD в DF со схемой как показано ниже.
interim_segmentsDF = segmentsRDD.map(lambda x: x.split(",")).toDF("itemid","market","itemkey","start_offset","end_offset","time_shifted","day_shifted","tmsmarketid","caption","itemstarttime")
Но я получаю сообщение об ошибке из-за невозможности преобразования «pyspark.rdd.PipelinedRDD» в DataFrame. Не могли бы вы объяснить разницу между "pyspark.rdd.PipelinedRDD" и "row RDD"? Я пытаюсь преобразовать в DF со схемой, как показано. Что мне здесь не хватает?
Спасибо