CSV文件读取火花1.6
Posted
技术标签:
【中文标题】CSV文件读取火花1.6【英文标题】:Csv file reading spark 1.6 【发布时间】:2019-09-09 12:12:55 【问题描述】:我的 csv 文件看起来
123456
Name age branch
Mahesh 21 ece
Pawan 22 cse
Count-21
它有标题(123456)和尾部(count-21)
我尝试使用 spark 1.6 创建的 spark 上下文来阅读它并阅读
Val df = spark.read.option("com.databrics.csv").option("header",false). option("inferSchema",false).load(path)
df.show()
我可以读取数据,但它只读取第一列
123456
Name
Mahesh
Pawan
Count-21
剩下的不是阅读,我可以添加任何额外的选项。
运行 df.show() 时的预期输出
123456
Name age branch
Mahesh 21 ece
Pawan 22 cse
Count-21
输出得到:
123456
Name
Mahesh
Pawan
Count-21
【问题讨论】:
【参考方案1】:您的输入文件不是一个好的 csv 文件。它不是逗号分隔的,这是 databricks 的默认值。如果文件是制表符分隔的,您可以使用.option("delimiter", "\t")
指定。字段的数量也不应该在行之间变化。 Spark 无法从第一行判断文件中有多少字段。如果第一行可以用正确的字段数固定,并且字段之间的分隔符是一致的,那么您应该能够读取它。
【讨论】:
【参考方案2】:试试这个:
Val df = spark.read().format("csv").schema(<define_schema_with_your_struct_fields>).option("header",false).load(path)
您可能希望定义如下架构:
List<StructField> fldList = new ArrayList<StructField>();
fldList.add(DataTypes.createStructField("Name", DataTypes.StringType, true));
fldList.add(DataTypes.createStructField("Age", DataTypes.StringType, true));
fldList.add(DataTypes.createStructField("Branch", DataTypes.StringType, true));
【讨论】:
以上是关于CSV文件读取火花1.6的主要内容,如果未能解决你的问题,请参考以下文章