Как прочитать разделенную трубкой строку в информационном кадре? - PullRequest
0 голосов
/ 27 октября 2018

Мне нужно прочитать файл в spark (databricks) как bytes и преобразовать его в строку.

file_bytes.decode("utf-8")

Все нормально, и у меня есть данные,как строка с разделителями трубы, включая возврат каретки и т. д. Все это выглядит хорошо.Что-то вроде:

"Column1"|"Column2"|"Column3"|"Column4"|"Column5"
"This"|"is"|"some"|"data."|
"Shorter"|"line."|||

Я хочу это в dataframe, хотя, чтобы я мог манипулировать им, и первоначально я пытался использовать следующее:

df = sqlContext.read.format("csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .option("delimiter", '|')
  .load(???)

Я ценю эточасть load() действительно предназначена для того, чтобы быть путем к месту на filesystem ... поэтому я боролся с этим.

Поэтому я вернулся к использованию pandas, поскольку оно делает жизньнамного проще:

import io
import pandas

temp = io.StringIO(file_bytes.decode("utf-8"))
df = pandas.read_csv(temp, sep="|")

Это pandas dataframe, а не spark dataframe, который, насколько я знаю (и это очень слабая осведомленность), имеет плюсыи минусы, связанные с тем, где он находится (в памяти), который связан с масштабируемостью / использованием кластера и т. д.

Первоначально, есть ли способ для меня получить свою строку в spark dataframe, используя sqlContext?Может быть, мне не хватает какого-либо параметра или переключателя и т. Д., Или я должен просто придерживаться pandas?

Главное, что меня беспокоит, это то, что сейчас файлы довольно маленькие (200 КБ или около того), ноони не могут быть вечными, и я хотел бы повторно использовать шаблон, который позволит мне работать с более крупными вещами (именно поэтому я немного обеспокоен использованием панд).

1 Ответ

0 голосов
/ 28 октября 2018

На самом деле вы можете загрузить RDD строк, используя CSV-ридер.

http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameReader

Итак, предполагая, что lines - это СДР строк, которые вы проанализировали, как вы описали, вы можете запустить:

df = spark.read.csv(lines, sep='|', header=True, inferSchema=True)

Затем CSV-источник будет сканировать СДР, а не пытаться загрузить файлы. Это позволяет выполнять пользовательскую предварительную обработку перед анализом.

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