Pyspark записывает результаты фрейма данных в текстовый файл - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь записать результаты фрейма данных в текстовый файл, и я получаю ошибку ниже, я не понимаю, что именно не так с типами данных

Вот мои результаты Dataframe

enter image description here

Я использую приведенный ниже код для записи результатов в текстовый файл

User_cast.write.mode("overwrite").option("compression","bzip2").format("text").save("loc/path")

ошибка ниже

pyspark.sql.utils.AnalysisException: u'Text data source does not support double data type.;'

1 Ответ

1 голос
/ 27 мая 2020

Это действительно ожидаемое поведение. У вас есть два варианта решения этой проблемы. Либо вы приводите все типы вашего фрейма данных к StringType (например, используя этот ответ , как преобразовать все столбцы фрейма данных в строку ) и объединяете их вместе (text источник данных поддерживает только один столбец), либо ваше сохранение как csv. Реконструкция вашей проблемы:

from pyspark.sql import SparkSession


spark = SparkSession.builder.getOrCreate()
colnames = [str(i+1) for i in range(11)]
df1 = spark._sc.parallelize([
  [it for it in range(11)], 
  [it for it in range(1,12)]]
).toDF((colnames))


df1.write.mode("overwrite").option("compression", "bzip2").format("text").save("./path")

Py4JJavaError: An error occurred while calling o67.save.
: org.apache.spark.sql.AnalysisException: Text data source does not support bigint data type.;

Однако я могу записать в CSV, изменив формат на csv, например:

df1.write.mode("overwrite").option("compression", "bzip2").format("csv").save("./path")

Поиск вывода (который будет зависеть от вашего разбиения и c.)

! ls path
part-00000-7db004e7-7309-466c-ba7b-112127e286ae-c000.csv.bz2
part-00001-7db004e7-7309-466c-ba7b-112127e286ae-c000.csv.bz2
part-00003-7db004e7-7309-466c-ba7b-112127e286ae-c000.csv.bz2
_SUCCESS

Надеюсь, это поможет!

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