import pandas as pd
import time
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QFileDialog, QMainWindow
from PyQt5.QtWidgets import QWidget, QMessageBox, QInputDialog
from db import myHdfsClient, myHiveConn
from visual import Ui_MainWindow
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
class myWindow(QMainWindow, Ui_MainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setupUi(self)
self.setFixedSize(870, 542)
self.stackedWidget.setCurrentIndex(0)
self.lineEdit_3.show()
self.canDown = False
self.client = myHdfsClient(hosts='139.9.238.165:50070', user_name='hadoop')
self.hiveCon = myHiveConn(host='139.9.238.165', port=10000, username='hadoop', database='dblab')
self.pushButton.clicked.connect(self.btn_cliked)
self.pushButton_2.clicked.connect(self.btn2_cliked)
self.pushButton_3.clicked.connect(self.btn3_cliked)
self.pushButton_4.clicked.connect(self.btn4_cliked)
self.pushButton_5.clicked.connect(self.btn5_cliked)
self.pushButton_6.clicked.connect(self.btn6_cliked)
self.pushButton_7.clicked.connect(self.btn7_cliked)
self.pushButton_8.clicked.connect(self.btn8_cliked)
self.pushButton_9.clicked.connect(self.btn9_cliked)
self.pushButton_10.clicked.connect(self.btn10_cliked)
self.pushButton_11.clicked.connect(self.btn11_cliked)
self.pushButton_13.clicked.connect(self.btn13_cliked)
self.comboBox.currentTextChanged.connect(self.cbChanged)
self.currentPage = 0
def btn_cliked(self):
self.stackedWidget.setCurrentIndex(0)
def btn2_cliked(self):
self.stackedWidget.setCurrentIndex(1)
ls_sta = self.client.list_status()
self.textEdit_2.clear()
self.textEdit_2.append("Owner\tGroup\t\tSize(B)\tLast Modified\tName")
for ls in ls_sta:
t = time.localtime(float(ls['modificationTime'] / 1000))
self.textEdit_2.append(str(ls['owner']) + '\t'
+ str(ls['group']) + '\t'
+ str(ls['length']) + '\t'
+ str(t.tm_year) + '/' + str(t.tm_mon) + '/' + str(t.tm_mday) + ' ' + str(t.tm_hour) + ':' + str(t.tm_min) + '\t'
+ str(ls['pathSuffix']))
def btn3_cliked(self):
self.stackedWidget.setCurrentIndex(2)
def bnt10_cliked(self):
self.stackedWidget.setCurrecntIndex(3)
def btn4_cliked(self):
filePath, filetype = QFileDialog.getOpenFileName(self.centralwidget, "选择文件", "C:\\Users\\nhf17\\Desktop","All(*.csv *.txt);;(csv(*.csv);;txt(*.txt)")
if len(filePath) > 0:
self.lineEdit.setText(filePath)
self.textEdit.clear()
with open(filePath, encoding='utf-8') as file:
for line in file:
self.textEdit.append(line)
def cbChanged(self):
if self.comboBox.currentText() == 'visit_date':
self.lineEdit_3.close()
else:
self.lineEdit_3.show()
def btn5_cliked(self):
attribute = self.comboBox.currentText()
value = self.lineEdit_3.text()
if attribute == 'visit_date':
s, e = self.dateEdit.date(), self.dateEdit_2.date()
value = "'{}-{}-{}'".format(s.year(), s.month(), s.day()) + "?" + "'{}-{}-{}'".format(e.year(), e.month(), e.day())
self.hiveCon.select(attribute, value)
self.textEdit_3.clear()
self.textEdit_3.append("id uid item_id behavior_type item_category visit_date province")
self.currentPage = 0
res = self.hiveCon.page_at(0)
for row in res:
self.textEdit_3.append(str(row))
self.textEdit_3.append('共计' + str(len(self.hiveCon.data)) + '条记录')
def btn6_cliked(self):
path = self.lineEdit.text()
if len(path) > 0:
if self.hiveCon.loadData(self.client, path):
print("load successfully")
else:
QMessageBox.information(self, "error", "文件已存在,请更改文件名")
else:
QMessageBox.information(self, "error", "请选择文件!")
def btn7_cliked(self):
fileName = self.lineEdit_2.text()
if len(fileName) > 0:
locPath, ft = QFileDialog.getSaveFileName(self, "文件保存", "C:\\Users\\nhf17\\Desktop\\" + fileName, "All(*)")
res = self.client.downLoad(fileName, locPath)
if res:
print("Download successfully")
else:
QMessageBox.information(self, "error", "文件不存在")
def btn8_cliked(self):
self.textEdit_3.clear()
self.textEdit_3.append("id uid\item_id behavior_type item_category visit_date province")
if (self.currentPage+1)*24 < len(self.hiveCon.data):
self.currentPage += 1
res = self.hiveCon.page_at(self.currentPage)
for row in res:
self.textEdit_3.append(str(row))
self.textEdit_3.append('共计' + str(len(self.hiveCon.data)) + '条记录')
def btn9_cliked(self):
self.textEdit_3.clear()
self.textEdit_3.append("id uid\item_id behavior_type item_category visit_date province")
if self.currentPage > 0:
self.currentPage -= 1
res = self.hiveCon.page_at(self.currentPage)
for row in res:
self.textEdit_3.append(str(row))
self.textEdit_3.append('共计' + str(len(self.hiveCon.data)) + '条记录')
def btn13_cliked(self):
locPath, ft = QFileDialog.getSaveFileName(self, "文件保存", "C:\\Users\\nhf17\\Desktop\\", "excel(*.xlsx)")
df = pd.DataFrame(self.hiveCon.data,
index=[i for i in range(len(self.hiveCon.data))],
columns=['id','uid','item_id','behavior_type','item_category','visit_date','province'])
df.to_excel(locPath)
def btn10_cliked(self):
self.stackedWidget.setCurrentIndex(3)
res = self.hiveCon.show_recommendation()
self.textEdit_4.clear()
self.textEdit_4.append("uid\titem_category")
for line in res:
self.textEdit_4.append(str(line))
def btn11_cliked(self):
uid = self.lineEdit_4.text()
if len(uid) > 0:
res = self.hiveCon.query(uid)
self.textEdit_4.clear()
self.textEdit_4.append("uid\titem_category")
for line in res:
self.textEdit_4.append(uid + '的推荐商品种类为:\n' + str(line))
if __name__ == "__main__":
app = QApplication(sys.argv)
mywindow = myWindow()
mywindow.show()
sys.exit(app.exec_())
"""
优化方向:
1.查询时可限定多个属性值
2.增加hdfs更换目录功能,hive更换数据库与表功能
"""