为什么在spark scala中使用inferSchema选项时会出现错误的数据类型?

为什么在spark scala中使用inferSchema选项时会出现错误的数据类型?,scala,apache-spark,Scala,Apache Spark,我正在读一个USA_Housing.csv文件,其中的列是 (平均面积收入、平均面积房屋年龄、平均面积房间数、平均面积卧室数、面积人口、价格、地址) 除地址外,所有列均为数值 通过此方法读取数据时: import org.apache.spark.sql.SparkSession val spark=SparkSession.builder().getOrCreate() val data=spark.read.option(“header”、“true”).option(“inferSchem

我正在读一个USA_Housing.csv文件,其中的列是 (平均面积收入、平均面积房屋年龄、平均面积房间数、平均面积卧室数、面积人口、价格、地址) 除地址外,所有列均为数值 通过此方法读取数据时:

import org.apache.spark.sql.SparkSession
val spark=SparkSession.builder().getOrCreate()
val data=spark.read.option(“header”、“true”).option(“inferSchema”、“true”).format(“csv”).load(“USA_Housing.csv”)
data.printSchema()

printSchema的输出为:

 |-- Avg Area Income: string (nullable = true)
 |-- Avg Area House Age: string (nullable = true)
 |-- Avg Area Number of Rooms: double (nullable = true)
 |-- Avg Area Number of Bedrooms: double (nullable = true)
 |-- Area Population: double (nullable = true)
 |-- Price: double (nullable = true)
 |-- Address: string (nullable = true)
正如一样,平均地区收入和地区住房年龄均为字符串,但在csv文件中为实际

当我按ATOM打开数据时,它显示为:

Avg Area Income,Avg Area House Age,Avg Area Number of Rooms,Avg Area Number of Bedrooms,Area Population,Price,Address
79545.45857431678,5.682861321615587,7.009188142792237,4.09,23086.800502686456,1059033.5578701235,"208 Michael Ferry Apt. 674
Laurabury, NE 37010-5101"
79248.64245482568,6.0028998082752425,6.730821019094919,3.09,40173.07217364482,1505890.91484695,"188 Johnson Views Suite 079
Lake Kathleen, CA 48958"
csv(来自kaggle)似乎格式错误,地址列中有一个换行符。因此,第一列实际上被解析为:

+------------------+
|               _c0|
+------------------+
| 79545.45857431678|
|         Laurabury|
| 79248.64245482568|
|     Lake Kathleen|
|61287.067178656784|
|        Danieltown|
| 63345.24004622798|
|     FPO AP 44820"|
|59982.197225708034|
|     FPO AE 09386"|

因此spark将其作为字符串

将multiLine设置为true应该会起作用

val data = spark.read.option("header","true").option("inferSchema","true").option("multiLine", "true").format("csv").load("USA_Housing.csv")

请提供您的样品file@ChandanRay我添加了两行数据,但在csv文件中,当通过excel打开时,整个地址内容是为其单元格定义的。正如您所提到的,但如何解决此问题我尝试为每个数据向sep添加
选项(“sep”、“,”)
,但失败了