Java 在Spark中读取csv文件时如何处理无引号的多行

Java 在Spark中读取csv文件时如何处理无引号的多行,java,apache-spark,hdfs,hadoop2,Java,Apache Spark,Hdfs,Hadoop2,以前曾询问过这方面的变体,但在我的例子中,我的多行中没有带引号的字符串 我有一个这样的文件 column1|column2 1|test1 test1 test1 2|test2 我想要这样的结果:(2行) 我试过这个: Dataset<Row> dsTest = session.read() .option("header", "true") .option("delimiter", "|")

以前曾询问过这方面的变体,但在我的例子中,我的多行中没有带引号的字符串

我有一个这样的文件

column1|column2
1|test1 test1 
test1
2|test2
我想要这样的结果:(2行)

我试过这个:

 Dataset<Row> dsTest = session.read()
                .option("header", "true")
                .option("delimiter", "|")
                .option("quote", "")
                .option("multiLine", "true")
                .csv("test.csv");

有人能帮我解决这个问题吗。

我试过类似的方法,也许它能给你一些线索

代码在
Scala
中,但我认为一切都很清楚,在
Java
中,它或多或少都是一样的

import org.apache.log4j.{Level,Logger}
导入org.apache.spark.sql.SparkSession
导入scala.util.{失败,成功,重试}
对象多行{
val spark=火花会话
.builder()
.appName(“多行”)
.master(“本地[*]”)
.config(“spark.sql.shuffle.partitions”,“4”)//将数据更改为更合理的默认分区数
.config(“spark.app.id”,“Multiline”)//使度量警告静音
.getOrCreate()
val sc=spark.sparkContext
val input=“/home/cloudera/files/tests/multiline.csv”
def main(参数:数组[字符串]):单位={
Logger.getRootLogger.setLevel(Level.ERROR)
导入spark.implicits_
试一试{
def makeInt(s:String):Int=Try(s.toInt)匹配{
案例成功(n)=>n
案例失败()=>-1
}
val数据=sc.textFile(输入)
val head=data.first()//头
val multiline=数据
.filter(line=>line!=头)//删除头
.map(line=>line.split(“|”))
.map(arr=>{
val sInt:Int=makeInt(arr(0))
if(sInt<0)(sInt.toString,arr(0))
其他(arr(0)、arr(1))
})
.toDF(“第1栏”、“第2栏”)
multiline.show()
/*
+-------+------------+
|第1列|第2列|
+-------+------------+
|1 |测试1测试1|
|-1 |测试1|
|2 |测试2|
+-------+------------+
*/
//要有机会查看Spark的web控制台:http://localhost:4040/
println(“在控制台中键入要退出的内容……”)
scala.io.StdIn.readLine()
}最后{
sc.停止()
println(“SparkContext已停止”)
spark.stop()
println(“SparkSession已停止”)
}
}
}

column1可以是“”,而不是-1如果多行没有被引用,读者如何知道下一行是属于上一列还是新行?
 Dataset<Row> dsTest = session.read()
                .option("header", "true")
                .option("delimiter", "|")
                .option("quote", "")
                .option("multiLine", "true")
                .csv("test.csv");
 +-----------+------------------+
    |column1    |column2           |
    +-----------+------------------+
    |          1| test1 test1
           test1| null    
    |          2|test2             |