【大数据存储与处理】第四次作业

2023-12-22 21:07:37

一. 简答题(共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:

  1. 聚合:

    • 使用 $group 阶段对文档进行聚合操作,可以对数据进行分组、计数等操作。
    db.collection.aggregate([
       { $group: { _id: "$field", count: { $sum: 1 } } }
    ])
    
  2. 查询:

    • 使用 find 命令进行查询,并通过条件筛选数据。
    db.collection.find({ field: value })
    
  3. 更新:

    • 使用 update 命令修改文档中的数据。
    db.collection.update({ field: value }, { $set: { newField: newValue } })
    
  4. 导出:

    • 使用 mongoexport 命令导出集合数据到 JSON 或 CSV 文件。
    mongoexport --db dbName --collection collectionName --out outputFile.json
    
  5. 数组操作:

    • 使用 $addToSet 操作符将元素添加到数组中,确保唯一性。
    db.collection.update({ _id: docId }, { $addToSet: { arrayField: newValue } })
    
  6. MapReduce:

    • 使用 MapReduce 进行复杂的数据分析。
    db.collection.mapReduce(
       function() { emit(this.field, 1); },
       function(key, values) { return Array.sum(values); },
       { out: "resultCollection" }
    )
    
  7. Python编程:

    • 使用 PyMongo 库与 MongoDB 进行交互。
    from pymongo import MongoClient
    
    client = MongoClient('mongodb://localhost:27017/')
    db = client['dbName']
    collection = db['collectionName']
    
  8. 索引:

    • 使用 createIndex 创建索引,提高查询性能。
    db.collection.createIndex({ field: 1 })
    
  9. 删除:

    • 使用 removedeleteManydeleteOne 删除文档。
    db.collection.remove({ field: value })
    
  10. 事务:

    • 使用 startTransactioncommitTransaction 等命令进行事务管理。
  11. 备份与恢复:

    • 使用 mongodumpmongorestore 命令进行数据库备份和恢复。

HBase:

  1. 查询:

    • 使用带有过滤器的 scan 命令进行数据扫描。
    Scan scan = new Scan();
    scan.setFilter(new SingleColumnValueFilter(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), CompareOperator.EQUAL, Bytes.toBytes("value")));
    
  2. Python编程:

    • 使用 HappyBase 库在 Python 中创建表格和获取表格名称。
    import happybase
    
    connection = happybase.Connection('localhost')
    table = connection.table('tableName')
    
  3. 写入:

    • 使用 Put 命令将数据插入 HBase 表中。
    Put put = new Put(Bytes.toBytes("rowKey"));
    put.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), Bytes.toBytes("value"));
    
  4. 删除:

    • 使用 Delete 命令删除表中的数据。
    Delete delete = new Delete(Bytes.toBytes("rowKey"));
    delete.addColumn(Bytes.toBytes("family"), Bytes.toBytes("qualifier"));
    
  5. 版本控制:

    • HBase支持多版本数据,可以通过时间戳来检索不同版本的数据。
  6. 列簇:

    • 表可以包含多个列簇,用于组织和存储相关的列。
  7. 过滤器:

    • 使用过滤器可以在扫描表时限制返回的结果,提高检索效率。

这是一个基本的填充,如果有进一步的问题或需要详细的解答,请随时告诉我。

文章来源:https://blog.csdn.net/qq_42531954/article/details/135111296
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。