Spark-Salesforce连接器中的空型模式



我有 dataset<行> 带有从Salesforce导入的48列:

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时,不支持 NULL数据类型 except。

我认为您在数据集或数据帧本身中遇到了问题。对我

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

这是按预期工作的。我建议检查您的数据框或数据集的数据以及您正在进行的操作。在编写数据之前,请使用DF.COUNT一次,然后查看其失败

相关内容

  • 没有找到相关文章

最新更新