我想从解析后的字符串RDD手动创建数据帧。我已经有了我的StructType,我可以从RowFactory.create(StructType[])
创建一个Row对象。我看到一个名为sqlContext.createDataFrame(RDD<Row>, StructType)
的方法,它采用RDD和StructType。那么如何将Row对象转换为RDD?
答案 0 :(得分:0)
我假设您解析的字符串全部在驱动程序内存中。如果不是,则必须使用RDD<String>
创建sc.textFile
,然后将其映射到RDD<StructType>
。
您可以使用sc.parallelize
将StructType[]
数组或列表转换为rdd。您不需要将其转换为行。确保StructType对象是可序列化的。
我还没有在java中完成火花,所以我可能会遇到一些语法错误,但这是基本的想法。
//say you have a list of structType in memory
List<StructType> structTypeList = Lists.newArrayList(structTypeObj1, structTypeObj2);
//now convert it to an rdd
JavaRDD<StructType> rdd = sc.parallelize(structTypeList);