SparkSession.createDataset()
仅允许List, RDD, or Seq
- 但不支持JavaPairRDD
。
因此,如果我有一个JavaPairRDD<String, User>
我希望从Dataset
创建SparkSession.createDataset()
,那么UserMap
限制的可行工作空间是否会创建一个包含String
的包含两个字段:User
和spark.createDataset(userMap, Encoders.bean(UserMap.class));
。
然后执行let str = "[[1,2],[1,3],[1,4]]"
let data = str.data(using: .utf8)!
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
if let arr = json as? [[Int]] {
print(arr)
}
} catch {
print(error)
}
?
答案 0 :(得分:1)
如果您可以将JavaPairRDD
转换为List<Tuple2<K, V>>
,那么您可以使用带有List的createDataset方法。见下面的示例代码。
JavaPairRDD<String, User> pairRDD = ...;
Dataset<Row> df = spark.createDataset(pairRDD.collect(), Encoders.tuple(Encoders.STRING(),Encoders.bean(User.class))).toDF("key","value");
或者您可以转换为RDD
Dataset<Row> df = spark.createDataset(JavaPairRDD.toRDD(pairRDD), Encoders.tuple(Encoders.STRING(),Encoders.bean(User.class))).toDF("key","value");