![](/img/trans.png)
[英]SQL ERROR java.lang.ArrayIndexOutOfBoundsException: 0
[英]Spark SQL Dataframe- java.lang.ArrayIndexOutOfBoundsException error
使用 spark java 我在逗号分隔符源文件上创建了数据框。 在源文件中,如果最后一列包含空白值,则其抛出arrayindexoutofbound
错误。 下面是示例数据和代码。 有什么办法可以处理这个错误,因为有很多机会在最后一列中获得空白值。 在下面的示例数据中,第 4 行导致问题。
样本数据:
1,viv,chn,34
2,man,gnt,56
3,anu,pun,22
4,raj,bang,*
代码:
JavaRDD<String> dataQualityRDD = spark.sparkContext().textFile(inputFile, 1).toJavaRDD();
String schemaString = schemaColumns;
List<StructField> fields = new ArrayList<>();
for (String fieldName : schemaString.split(" ")) {
StructField field = DataTypes.createStructField(fieldName, DataTypes.StringType, true);
fields.add(field);
}
StructType schema = DataTypes.createStructType(fields);
JavaRDD<Row> rowRDD = dataQualityRDD.map((Function<String, Row>) record -> {
// String[] attributes = record.split(attributes[0], attributes[1].trim());
Object[] items = record.split(fileSplit);
// return RowFactory.create(attributes[0], attributes[1].trim());
return RowFactory.create(items);
});
}
}
我使用了 spark 2.0 并且能够毫无例外地读取 csv:
SparkSession spark = SparkSession.builder().config("spark.master", "local").getOrCreate();
JavaSparkContext jsc = JavaSparkContext.fromSparkContext(spark.sparkContext());
JavaRDD<Row> csvRows = spark.read().csv("resources/csvwithnulls.csv").toJavaRDD();
StructType schema = DataTypes.createStructType(
new StructField[] { new StructField("id", DataTypes.StringType, false, Metadata.empty()),
new StructField("fname", DataTypes.StringType, false, Metadata.empty()),
new StructField("lname", DataTypes.StringType, false, Metadata.empty()),
new StructField("age", DataTypes.StringType, false, Metadata.empty()) });
Dataset<Row> newCsvRows = spark.createDataFrame(csvRows, schema);
newCsvRows.show();
完全使用您拥有的行并且它工作正常:查看输出:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.