如何加载带有损坏列的CSV数据集?
我已将客户端数据库导出到csv文件,并尝试使用以下方法将其导入Spark:如何加载带有损坏列的CSV数据集?,csv,apache-spark,Csv,Apache Spark,我已将客户端数据库导出到csv文件,并尝试使用以下方法将其导入Spark: spark.sqlContext.read .format("csv") .option("header", "true") .option("inferSchema", "true") .load("table.csv") 在做了一些验证之后,我发现一些ID是null,因为列有时有回车符。这使得接下来的所有列都错位,产生了多米诺效应,破坏了所有数据 奇怪的是,调用printSchema时,生成的表结构
spark.sqlContext.read
.format("csv")
.option("header", "true")
.option("inferSchema", "true")
.load("table.csv")
在做了一些验证之后,我发现一些ID是null
,因为列有时有回车符。这使得接下来的所有列都错位,产生了多米诺效应,破坏了所有数据
奇怪的是,调用printSchema
时,生成的表结构很好
如何解决此问题?您似乎很幸运地使用了
inferSchema
,它工作得很好(因为它只读取很少的记录来推断模式),因此printSchema
会给您一个正确的结果
由于CSV导出文件已损坏,并且假设您希望使用Spark处理该文件(例如给定其大小),请使用
textFile
读取该文件并修复ID。将其保存为CSV格式并重新加载。我不确定您使用的是spark的哪个版本,但从2.2开始(我相信),有一个“多行”选项可用于将具有换行符的字段保持在一起。从我读到的其他一些东西来看,您可能需要应用一些引用和/或转义字符选项,以使其按照您想要的方式工作
spark.read
.csv("table.csv")
.option("header", "true")
.option("inferSchema", "true")
**.option("multiLine", "true")**
请提供您的数据样本(输入和输出),突出您的问题。您需要返回导出源并从那里开始工作。Spark不能优雅地处理这个问题。不幸的是,你是对的,在导入阶段没有办法解决这个问题。