我需要将我的Spark 1.6.2代码传递给Java中的Spark 2.2.0。
DataFrame eventsRaw = sqlContext.sql("SELECT * FROM my_data");
Row[] rddRows = eventsRaw.collect();
for (int rowIdx = 0; rowIdx < rddRows.length; ++rowIdx)
{
Map<String, String> myProperties = new HashMap<>();
myProperties.put("startdate", rddRows[rowIdx].get(1).toString());
JEDIS.hmset("PK:" + rddRows[rowIdx].get(0).toString(), myProperties); // JEDIS is a Redis client for Java
}
据我所知,Spark 2.2.0 for Java中没有DataFrame
。只有1个}}。但是,如果我将Dataset
替换为DataFrame
,那么我会Dataset
而不是Object[]
作为Row[]
的输出。然后eventsRaw.collect()
标记为红色,我无法编译代码。
我怎样才能正确地做到这一点?
答案 0 :(得分:2)
DataFrame
(Scala)是Dataset<Row>
:
SparkSession spark;
...
Dataset<Row> eventsRaw = spark.sql("SELECT * FROM my_data");
但您应该使用collect
而不是foreach
(使用延迟单例连接):
eventsRaw.foreach(
(ForeachFunction<Row>) row -> ... // replace ... with appropriate logic
);
或foreachPartition
(初始化每个分区的连接):
eventsRaw.foreachPartition((ForeachPartitionFunction<Row)) rows -> {
... // replace ... with appropriate logic
})