读取文件转为带有Schema的DataFrame

楔子

spark读取文件转为DataSet


/**
 * 读取文件转为Dataset
 * 
 * @param sparkSession
 * @param filePath
 *            文件路径
 * @param schemaString
 *            schema 字符串(以逗号为分隔符)
 * @param fileSplit
 *            文件中的分隔符
 * @return
 */
public static Dataset<Row> txtfileToDateSet(SparkSession sparkSession, String filePath, String schemaString, String fileSplit) {
	List<StructField> fields = new ArrayList<StructField>(16);
	for (String fieldName : schemaString.split(",")) {
		fields.add(DataTypes.createStructField(fieldName, DataTypes.StringType, true));
	}
	StructType schema = DataTypes.createStructType(fields);
	JavaRDD<Row> rowRDD = sparkSession.sparkContext().textFile(filePath, 1).toJavaRDD().map(new Function<String, Row>() {
		@Override
		public Row call(String record) throws Exception {
			return RowFactory.create(record.split(fileSplit));
		}
	});

	return sparkSession.createDataFrame(rowRDD, schema);
}

/**
 * 读取文件转为Dataset lambda版本
 * 
 * @param sparkSession
 * @param filePath
 *            文件路径
 * @param schemaString
 *            schema 字符串(以逗号为分隔符)
 * @param fileSplit
 *            文件中的分隔符
 * @return
 */
public static Dataset<Row> txtfileToDateSet2(SparkSession sparkSession, String filePath, String schemaString, String fileSplit) {
	List<StructField> fields = new ArrayList<StructField>(16);
	for (String fieldName : schemaString.split(",")) {
		fields.add(DataTypes.createStructField(fieldName, DataTypes.StringType, true));
	}
	StructType schema = DataTypes.createStructType(fields);
	JavaRDD<Row> rowRDD = sparkSession.sparkContext().textFile(filePath, 1).toJavaRDD().map(t -> t.split("fileSplit")).map(t -> RowFactory.create(t));
	return sparkSession.createDataFrame(rowRDD, schema);
}

思路

map(new Function<String, Row>(这个过程,不想使用java版本的方式,决定使用lambda方式,苦于无奈,最终苦思冥想,看到一个scala的demo,受到启发,使用2次map就行

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值