#azure #csv #pyspark #databricks
Вопрос:
Я использую блокнот Databricks для чтения и записи файла в одно и то же место. Но когда я пишу в файл, я получаю много файлов с разными именами. Подобный этому:
Я не уверен, почему эти файлы создаются в указанном мной расположении. Кроме того, после выполнения операции записи был создан еще один файл с именем «new_location».
Я хочу, чтобы после чтения файла из хранилища больших двоичных объектов Azure я записал файл в то же место с тем же именем, что и оригинал, в то же место. Но я не могу этого сделать. пожалуйста, помогите мне, поскольку я новичок в Pyspark, я уже смонтирован, и теперь я читаю хранилище файлов CSV в контейнере хранилища blob-объектов azure. Перезаписанный файл создается с именем «part-00000-tid-84371752119947096-333f1e37-6fdc-40d0-97f5-78cee0b108cf-31-1-c000.csv»
Код:
df = spark.read.csv("/mnt/ndemo/nsalman/addresses.csv", inferSchema = True)
df = df.toDF("firstName","lastName","street","town","city","code")
df.show()
file_location_new = "/mnt/ndemo/nsalman/new_location"
# write the dataframe as a single file to blob storage
df.write.format('com.databricks.spark.csv')
.mode('overwrite').option("header", "true").save(file_location_new)
Ответ №1:
Spark сохранит частичный csv-файл для каждого раздела вашего набора данных. Чтобы сгенерировать один csv-файл, вы можете преобразовать его в фрейм данных pandas, а затем записать его.
Попробуйте изменить эти строки:
df.write.format('com.databricks.spark.csv')
.mode('overwrite').option("header", "true").save(file_location_new)
к этой строке
df.toPandas().to_csv(file_location_new, header=True)
Возможно, вам потребуется добавить "/dbfs/"
, чтобы file_location_new
это сработало.
Вот минимальный автономный пример, демонстрирующий, как написать csv-файл с помощью pandas:
df = spark.createDataFrame([(1,3),(2,2),(3,1)], ["Testing", "123"])
df.show()
df.toPandas().to_csv("/dbfs/" "/mnt/ndemo/nsalman/" "testfile.csv", header=True)
Комментарии:
1. file_location_new = «/mnt/ndemo/nsalman/new_location» # преобразуйте его в фрейм данных pandas, а затем запишите его df = df.toPandas().to_csv(«/dbfs/» file_location_new, заголовок=True) df.запись.формат («com.databricks.spark.csv»). режим («перезапись»). опция («заголовок», «правда»). сохранить(file_location_new) Я сделал это, но это дает мне ошибку: ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘toPandas’
2. Вы уверены, что df-это фрейм данных spark? Я обновил свой ответ, чтобы быть более точным в том, какие строки следует изменить.