Scala Spark Streaming上下文以读取CSV

Scala Spark Streaming上下文以读取CSV,scala,csv,apache-spark,spark-streaming,Scala,Csv,Apache Spark,Spark Streaming,我很难使用StreamingContext读取CSV并将每一行发送到另一个进行其他处理的方法。我试着用换行符进行拆分,但它在三列之后就会拆分(每行大约有10列) 行): 如果我在Excel中打开CSV,每列大约有10个值。如果我使用升华或某个文本编辑器打开同一个文件,那么在前3个值之后会出现一个换行符。不确定这是编码还是升华的显示方式。在任何情况下,我都试图在Spark中获取整行-不确定是否有办法做到这一点。ssc.textFileStream在内部创建一个文件流,并在新行字符上开始拆分。但是您

我很难使用StreamingContext读取CSV并将每一行发送到另一个进行其他处理的方法。我试着用换行符进行拆分,但它在三列之后就会拆分(每行大约有10列) 行):


如果我在Excel中打开CSV,每列大约有10个值。如果我使用升华或某个文本编辑器打开同一个文件,那么在前3个值之后会出现一个换行符。不确定这是编码还是升华的显示方式。在任何情况下,我都试图在Spark中获取整行-不确定是否有办法做到这一点。

ssc.textFileStream
在内部创建一个文件流,并在新行字符上开始拆分。但是您的数据包含文本限定符

1996, Jeep, "Grand Cherokee, MUST SELL! 
air", moon roof, loaded, 4799.00
这里有些文本是双引号,行是多行的。如果您尝试按
拆分数据,
将:

[1996, Jeep, "Grand Cherokee,MUST SELL!]
它将丢失其他数据点,因为您使用逗号进行拆分。为了避免这种情况,您可以使用
sqlContext

df = sqlContext.read
               .format("com.databricks.spark.csv")
               .option("header", "true")
               .option("inferSchema","true")
               .option("multiLine","true")
               .option("quoteMode","ALL")
               .load(path)

或者,您可以使用预处理CSV来处理多行、双引号和其他特殊字符,然后将这些文件放入目录,然后启动
ssc.textFileStream

所以“行”已经是一行了,不是吗?CSV用逗号或分号分隔。也许我错过了什么?数据文件的格式可能有助于找到答案,我也是这么想的。但当我打印“行”时,它只打印前三列,并在下一次迭代中打印下三列。但是,当我在Excel中打开它时,所有这些列都在同一行中,这可能与它的传输方式有关……例如,远程套接字中的某些内容?我的经验是,线路总是以整体方式传输,并由接收器作为一条线进行处理。您在远程套接字上使用的outputstream方法是什么?@covfefe为什么要使用流来读取csv文件。有什么特别的原因吗
df = sqlContext.read
               .format("com.databricks.spark.csv")
               .option("header", "true")
               .option("inferSchema","true")
               .option("multiLine","true")
               .option("quoteMode","ALL")
               .load(path)