Схема нулевого типа в коннекторе spark-salesforce - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть Набор данных с 48 столбцами, импортированными из Salesforce:

Dataset<Row> df = spark.read()
  .format("com.springml.spark.salesforce")
  .option("username", prop.getProperty("salesforce_user"))
  .option("password", prop.getProperty("salesforce_auth"))
  .option("login", prop.getProperty("salesforce_login_url"))
  .option("soql", "SELECT "+srcCols+" from "+tableNm)
  .option("version", prop.getProperty("salesforce_version"))
  .load()

Столбцы также содержат null.Мне нужно сохранить этот набор данных в файле .txt и ограничен ^.
Я пытался сохранить это как текстовый файл, используя:

finalDS.coalesce(1).write().option("delimiter", "^").toString().text(hdfsExportLoaction);

Но я получил ошибку:

Exception in thread "main" org.apache.spark.sql.AnalysisException: Try to map struct<Columns....>to Tuple1, but failed as the number of fields does not line up.;
        at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveDeserializer$.org$apache$spark$sql$catalyst$analysis$Analyzer$ResolveDeserializer$$fail(Analyzer.scala:2320)

Я пытался:

finalDS.map(row -> row.mkString(), Encoders.STRING()).write().option("delimiter", "^").text(hdfsExportLoaction);

, но разделители исчезают, и все данные записываются сцепленными.

Затем я попытался сохранить как csv (просто чтобы он работал):

finalDS.coalesce(1).write().mode(SaveMode.Overwrite).option("header", "true").option("delimiter", "^").option("nullValue", "").csv(hdfsExportLoaction+"/"+tableNm);

и:

finalDS.na().fill("").coalesce(1).write().option("delimiter", "^").mode(SaveMode.Overwrite).csv(hdfsExportLoaction);

, но потом пожаловался, что

Exception in thread "main" java.lang.UnsupportedOperationException: CSV data source does not support null data type.

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

1 Ответ

0 голосов
/ 18 февраля 2019

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

df.coalesce(1).write.option("delimiter", "^").mode(SaveMode.Overwrite).csv("<path>")

это сработало, как и ожидалось. Правильно разграничено знаком «^».Я бы посоветовал проверить данные вашего фрейма данных или наборов данных и операций, которые вы выполняете в нем.Перед записью данных используйте df.count один раз и убедитесь, что он не работает или нет

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