【大数据存储与处理】第四次作业
一. 简答题(共8题)
1. (简答题)此题为mongodb操作题,使用在线平台或分享的虚拟机平台软件,写出命令,并把结果截图一起提交。对testdb数据库items集合进行聚合分组,然后在统计卖出的平均数量(“quantity”)。
正确答案:
db.items.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"pnumber",average:{
a
v
g
:
"
avg:"
avg:"quantity"}}}])
2. (简答题)此题为HBase操作题,使用在线平台或分享的虚拟机平台软件,查询student表中StuInfo列族Age列中值等于19的所有键值对。
正确答案:
scan ‘student’,{COLUMN=>‘StuInfo:Age’,FILTER=>“SingleColumnValueFilter(‘StuInfo’,‘Age’,=,‘binary:19’)”}
3. (简答题)此题为mongodb操作题,使用在线平台或分享的虚拟机平台软件,写出命令,并把结果截图一起提交。使用游标,输出testdb数据库book集合中“price”>=60的所有文档信息。
正确答案:
var cursor = db.book.find({“price”:{$gte:60}})
while(cursor.hasNext()) {printjson(cursor.next())}
4. (简答题)此题为mongodb操作题,使用在线平台或分享的虚拟机平台软件,写出命令,并把结果截图一起提交。修改test数据库sales集合中所有quantity键值为10的文档改成quantity键值为80。
正确答案:
db.sales.update({“quantity”:10},{$set:{“quantity”:80}},0,1)
db.sales.find()
5. (简答题)此题为mongodb操作题,使用在线平台或分享的虚拟机平台软件,写出命令,并把结果截图一起提交。查询test数据库book集合中price在[45,60)范围、或者出版社是“机械工业出版社”的图书信息(即45=<price<60),要求返回by、price、title键值对,其他键值对不显示。
正确答案:
db.book.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{"price":{"gte":45,“$lt”:60}},{“by”:“机械工业出版社”}]},{“_id”:0,“by”:1,“price”:1,“title”:1})
6. (简答题)此题为mongodb操作题,使用在线平台或分享的虚拟机平台软件,写出命令,并把打开result.txt结果截图一起提交。把testdb数据库book集合中的文档数据导出,保存到/home/hadoop/result.txt。
我的答案:
mongoexport --db testdb --collection book --out /home/hadoop/result.txt
正确答案:
mongoexport -h 192.168.226.132:27017 -d testdb -c book -o /home/hadoop/result.txt
7. (简答题)
建立mytest数据库,建立fruit集合,键值对输入如下表文档,并截图输入结果。
正确答案:
db.fruit.insert({“_id”:1,“fruits”:[“apple”, “banana”, “peach”]})
db.fruit.insert({“_id”:2,“fruits”:[ “apple”,“cherry”,“orange”]})
8. (简答题)此题为mongodb操作题,使用在线平台或分享的虚拟机平台软件,在testdb数据库中c3集合中第一条文档里的fruit数组添加信息:grape。写出命令,并把结果截图一起提交。
正确答案:
db.c3.update({“_id”: ObjectId(“610d803f8bbd7614abe4ad36”)},{$addToSet:{fruit:“grape”}})
db.c3.find()
二. 应用题(共4题)
9. (应用题)使用在线平台或分享的虚拟机平台软件,写出命令,并把运行结果截图一起提交。使用MongoDB中的MapReduce查询testdb数据库items集合中数量“quantity”大于5的商品编号(“pnumber”)。
正确答案:
var map=function(){emit(this.pnumber,this.quantity)}
var reduce=function(key,value){return value.join(‘,’)}
var options={query:{quantity:{$gt:5}},out:“pnumber”}
db.items.mapReduce(map,reduce,options);
db.pnumber.find()
10. (应用题)MongoDB python编程。使用在线平台或分享的虚拟机平台软件,写出程序,并把运行结果截图一起提交。Python编程新建runoobdb数据库中并在runoobdb数据库新建commodity集合,并插入文档{ “_id” : 1, “item” : “abc”, “price” : 10, “quantity” : 2 },并打印出该集合中的文档数据。
正确答案:
import pymongo
myclient = pymongo.MongoClient(“mongodb://192.168.126.140:27017/”)
mydb = myclient[“runoobdb”]
mycol = mydb[“commodity”]
mydict = {“_id” : 1, “item” : “abc”, “price” : 10, “quantity” : 2 }
x = mycol.insert_one(mydict)
for result in mycol.find():
print(result)
11. (应用题)
此题为操作题,使用在线平台或分享的虚拟机平台软件。文档替换,把mytest数据库中mybook集合中如图1所示的文档替换成图2的新文档,如集合不存在,自行创建并录入数据。列出相关命令或程序,结果截图。(7分)
正确答案:
use mytest
db.mybook.insert({“_id”:2,“title”:“Nosql”,“by”:“ptpress”,“author”:“Jack”,“price”:45,“description”:“Database”})
var u=db.mybook.findOne({“title”:“Nosql”})
u.bookinfo={“author”:u.author,“price”:u.price}
u.bookname=u.title
delete u.author
delete u.price
delete u.title
db.mybook.update({“title”:“Nosql”},u)
db.mybook.find().pretty()
12. (应用题)HBase python编程,使用在线平台或分享的虚拟机平台软件,写出程序,并把运行结果截图一起提交。编程在HBase数据库中新建test数据表,列族为:cf,并打印出所有数据库表名。
正确答案:
(1)启动驱动程序命令:
hbase thrift start
(2)参考程序如下:
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
from thrift.transport import TTransport
from hbase import Hbase
from hbase.ttypes import *
transport = TSocket.TSocket(‘192.168.126.140’,9090)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Hbase.Client(protocol)
transport.open()
contents = ColumnDescriptor(name=‘cf:’, maxVersions=1)
client.createTable(‘test’, [contents])
result=client.getTableNames()
print (result)
(3)运行结果:
MongoDB:
-
聚合:
- 使用
$group
阶段对文档进行聚合操作,可以对数据进行分组、计数等操作。
db.collection.aggregate([ { $group: { _id: "$field", count: { $sum: 1 } } } ])
- 使用
-
查询:
- 使用
find
命令进行查询,并通过条件筛选数据。
db.collection.find({ field: value })
- 使用
-
更新:
- 使用
update
命令修改文档中的数据。
db.collection.update({ field: value }, { $set: { newField: newValue } })
- 使用
-
导出:
- 使用
mongoexport
命令导出集合数据到 JSON 或 CSV 文件。
mongoexport --db dbName --collection collectionName --out outputFile.json
- 使用
-
数组操作:
- 使用
$addToSet
操作符将元素添加到数组中,确保唯一性。
db.collection.update({ _id: docId }, { $addToSet: { arrayField: newValue } })
- 使用
-
MapReduce:
- 使用 MapReduce 进行复杂的数据分析。
db.collection.mapReduce( function() { emit(this.field, 1); }, function(key, values) { return Array.sum(values); }, { out: "resultCollection" } )
-
Python编程:
- 使用 PyMongo 库与 MongoDB 进行交互。
from pymongo import MongoClient client = MongoClient('mongodb://localhost:27017/') db = client['dbName'] collection = db['collectionName']
-
索引:
- 使用
createIndex
创建索引,提高查询性能。
db.collection.createIndex({ field: 1 })
- 使用
-
删除:
- 使用
remove
或deleteMany
、deleteOne
删除文档。
db.collection.remove({ field: value })
- 使用
-
事务:
- 使用
startTransaction
和commitTransaction
等命令进行事务管理。
- 使用
-
备份与恢复:
- 使用
mongodump
和mongorestore
命令进行数据库备份和恢复。
- 使用
HBase:
-
查询:
- 使用带有过滤器的
scan
命令进行数据扫描。
Scan scan = new Scan(); scan.setFilter(new SingleColumnValueFilter(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), CompareOperator.EQUAL, Bytes.toBytes("value")));
- 使用带有过滤器的
-
Python编程:
- 使用 HappyBase 库在 Python 中创建表格和获取表格名称。
import happybase connection = happybase.Connection('localhost') table = connection.table('tableName')
-
写入:
- 使用
Put
命令将数据插入 HBase 表中。
Put put = new Put(Bytes.toBytes("rowKey")); put.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), Bytes.toBytes("value"));
- 使用
-
删除:
- 使用
Delete
命令删除表中的数据。
Delete delete = new Delete(Bytes.toBytes("rowKey")); delete.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"));
- 使用
-
版本控制:
- HBase支持多版本数据,可以通过时间戳来检索不同版本的数据。
-
列簇:
- 表可以包含多个列簇,用于组织和存储相关的列。
-
过滤器:
- 使用过滤器可以在扫描表时限制返回的结果,提高检索效率。
这是一个基本的填充,如果有进一步的问题或需要详细的解答,请随时告诉我。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!