分享

spark ml推荐算法的结果是怎么保存啊

ighack 2020-1-16 08:22:39 发表于 疑问解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 3183
本帖最后由 ighack 于 2020-1-16 10:53 编辑

[mw_shl_code=java,true]Dataset<Row> userRecs = model.recommendForAllUsers(10);
            userRecs.toJavaRDD().map(new Function<Row, String>() {
                @Override
                public String call(Row row) throws Exception {
                    Integer userid = row.getInt(0);
                    String rating = "";
                    JSONObject json = new JSONObject();
                    JSONArray arr = new JSONArray();
                    json.put("UserID",userid);
                    Iterator<GenericRowWithSchema> itor =((WrappedArray)row.getAs(1)).iterator();
                    while (itor.hasNext()){
                        GenericRowWithSchema res = itor.next();
                        Integer moveid = res.getInt(0);
                        Float rat = res.getFloat(1);
                        JSONObject _data = new JSONObject();
                        _data.put("MovieID",moveid);
                        _data.put("rating",rat);
                        arr.add(_data);
                    }
                    json.put("result",arr);
                    return json.toJSONString();
                }
            }).saveAsTextFile("G:\\code\\Java\\sparkml\\src\\main\\resources\\data");[/mw_shl_code]
我做了一个预测以后。想要把结果保存下来
但这样的代码保存出来的结果有好多文件
类似
.part-00048.crc
.part-00049.crc
还有很多
part-00015
part-00016
part-00017
像part-00017这样的文件里是结果,内容为
[mw_shl_code=applescript,true]{"result":[{"MovieID":170,"rating":4.360397},{"MovieID":143,"rating":4.2904},{"MovieID":694,"rating":4.283311},{"MovieID":64,"rating":4.2403197},{"MovieID":213,"rating":4.119807},{"MovieID":216,"rating":4.107259},{"MovieID":69,"rating":4.069874},{"MovieID":97,"rating":4.039567},{"MovieID":318,"rating":4.0127234},{"MovieID":215,"rating":4.0114603}],"UserID":731}
{"result":[{"MovieID":313,"rating":4.123612},{"MovieID":1643,"rating":3.9563293},{"MovieID":340,"rating":3.9490104},{"MovieID":316,"rating":3.9220722},{"MovieID":483,"rating":3.9156215},{"MovieID":320,"rating":3.8911288},{"MovieID":1625,"rating":3.8898299},{"MovieID":1449,"rating":3.8802822},{"MovieID":134,"rating":3.8677},{"MovieID":1398,"rating":3.8600028}],"UserID":587}[/mw_shl_code]
虽然是我要的结果但文件很多。而且每个文件的结果只有只条。
为什么不是保存到几个或者是一个文件里
.part-00049.crc这样的文件是什么呢。和保存模型的文件很像
我怎才能保存到一个大文件里。或者保存到HDFS

[mw_shl_code=java,true]userRecs.write().json("G:\\code\\Java\\sparkml\\src\\main\\resources\\data-json");[/mw_shl_code]
这样做其他也是一样的结果

已有(3)人评论

跳转到指定楼层
bioger_hit 发表于 2020-1-16 17:44:34
可以用这个方法:
  coalesce(1,true).saveAsTextFile()


想了解更多看下面:
一般而言,saveAsTextFile会按照执行task的多少生成多少个文件,比如part-00000一直到part-0000n,n自然就是task的个数,亦即是最后的stage的分区数。

在RDD上调用   coalesce(1,true).saveAsTextFile(),   意味着做完计算之后将数据汇集到一个分区,然后再执行保存的动作,显然,一个分区,Spark自然只起一个task来执行保存的动作,也就只有一个文件产生了。又或者,可以调用repartition(1),它其实是coalesce的一个包装,默认第二个参数为true。

回复

使用道具 举报

ighack 发表于 2020-1-17 08:21:33
bioger_hit 发表于 2020-1-16 17:44
可以用这个方法:
  coalesce(1,true).saveAsTextFile()

谢了
那像.crc的文件是什么啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条