Нулевой знак при сохранении файла .tab с разделителями в блоках данных - PullRequest
0 голосов
/ 16 января 2020

У меня есть шаблон csv, сохраненный в ADL. Я читаю этот шаблон и добавляю некоторые данные из фрейма данных и сохраняю их как файл с разделителями табуляции. Это работает, но у меня есть эти Nul знаки в начале и конце каждого ряда. Как я могу сохранить это без этих признаков. Saved result with NUL sign

Часть кода, который я использую:

    def saveToSingleTxt(df, saveLocation):
      txtLocation = saveLocation+'temp.folder'
      fileLocation = saveLocation

      df.coalesce(1).write.format("csv").option("header", "false").option("delimiter","\t").option("quote", "\u0000").option("charset","UTF-8").mode("overwrite").save(txtLocation)

      file = dbutils.fs.ls(txtLocation)[-1].path  
      dbutils.fs.cp(file, fileLocation)
      dbutils.fs.rm(txtLocation, recurse=True)

df = getDimContent(rootPayLoadDataV)
dftempV28 = sqlContext.read.format("com.databricks.spark.csv").option("header", "false").load(sourceADLSFullPathTemp + fileNameTempV28)
dftempV28 = dftempV28.replace('## SC\tD:YYYY-MM-DD hh:mm:ss\tA:300092594:128', '## SC\tD:' + str(curentDate.strftime("%Y-%m-%d %H:%M:%S")) + '\tA:300092594:128')

df = df.withColumn("KeyContentName", concat(df["ContentID"], lit("\t"), df["ContentName"]))

appendV28 = dftempV28.union(df.select(df["KeyContentName"]))

saveToSingleTxt(df, destinationADLSFullPath + fileNameV28)

Как я могу сохранить это без знака NUL ('\ x00' шестнадцатеричный) ? Спасибо!

1 Ответ

0 голосов
/ 24 января 2020

Хорошо, ситуация такая: когда вы читаете файл в кадре данных, строки будут помещены в один столбец. Имя по умолчанию '_c0'. Я хотел три столбца для нового добавленного файла с разделителем табуляции. Одним из способов было создание схемы для фрейма данных с 3 столбцами, а также в файле шаблона для размещения имен столбцов для всех данных, которые будут разделены символом табуляции. В другом фрейме данных, который мне нужно добавить к этому фрейму данных шаблона, мне нужно создать дополнительный столбец (потому что фрейм данных имеет 2 столбца), например, «lit (none)». Проблема в том, что при сохранении этого добавленного фрейма данных третий столбец будет похож на двойные кавычки "", чего я не хочу.

Я решил сделать это так:

  1. Создать схему с одним столбцом
  2. поместить конвейер между данными, которые будут находиться в отдельных столбцах в файле шаблона
  3. прочитать файл шаблона (будет один столбец)
  4. заменить конвейер на '\ t' разделитель табуляции
  5. добавить новый фрейм данных
  6. сохранить файл не так, как разделитель табуляции

Обратите внимание на добавленный фрейм данных для строки, состоящей из двух столбцов для столбцов / столбцов который может иметь знак «,», потому что вы сохраняете файл как csv, а не как разделитель табуляции. У вас определенно возникнет проблема, поэтому замените ',' на что-то другое.

...