JavaRDD<LabeledPoint> parsedData = data.filter( //过滤一下,不读取空行 new Function<String, Boolean>(){ public Boolean call(String line){ if(line.length() > 0) return true; return false; } } ).map(//用map对每一行数据操作一下 new Function<String, LabeledPoint>() { public LabeledPoint call(String line) { return new LabeledPoint(Double.parseDouble(line.split(",")[0]), Vectors.dense(1, 3)); } } ); parsedData.cache(); //迭代次数 int numIterations = 50;
时间: 2024-02-10 19:19:15 浏览: 24
这段代码是使用 Spark 的 Java API 对数据进行处理,具体如下:
首先,定义一个 JavaRDD 对象 parsedData,该对象是对 data 进行过滤和转换后得到的结果。使用 filter 函数对 data 进行过滤,去掉长度为 0 的空行,使用 map 函数对每一行数据进行转换。在 map 函数中,使用 split 函数将每一行数据按逗号分隔,得到一个字符串数组。然后,使用 Double.parseDouble 函数将字符串数组的第一个元素转换为 double 类型,并使用 Vectors.dense 函数构造一个二维向量,向量的第一个元素为 1,第二个元素为 3。最后,将转换后的结果封装为一个 LabeledPoint 对象。
接着,使用 cache 函数将 parsedData 对象缓存,提高后续操作的效率。
最后,定义一个整数变量 numIterations,表示迭代次数为 50。
相关问题
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@page import="com.util.SQLConn"%> <%@page import="java.sql.*" %> <%@page import="java.sql.Statement" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>登陆跳转servlet</title> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <%-- 获取前端数据 --%> <% String usernum = request.getParameter("usernum"); String userpwd = request.getParameter("userpwd"); %> <%-- 定义SQLConn类和INSERT_SQL常量 --%> <% SQLConn sqlConn = new SQLConn(); //final String INSERT_SQL = "INSERT INTO User_ZC(UserID, Name, Code, Power) VALUES (?, ?, ?, ?)"; sqlConn.openDB();//打开数据库 String sql = "select UserId,Code from User_ZC"; ResultSet rs = sqlConn.execQuery(sql); boolean v = false; while(rs.next()){ if(rs.getString("usernum").equals(usernum)&&rs.getString("userpwd").compareTo(userpwd)==0){ v = true; } } rs.close(); sqlConn.closeDB(); if(v){ request.getRequestDispatcher("ZCS.jsp").forward(request, response); }else{ request.getRequestDispatcher("ZCB.jsp").forward(request, response); } %> </body> </html> 找bug
在代码中,有两处问题:
1. 在获取前端数据时,需要使用参数名 `usernum` 和 `userpwd` 而不是 `UserID` 和 `Code`。
```
String usernum = request.getParameter("usernum");
String userpwd = request.getParameter("userpwd");
```
2. 在比较密码时,应该使用 `equals()` 方法而不是 `compareTo()` 方法。
```
if(rs.getString("usernum").equals(usernum) && rs.getString("userpwd").equals(userpwd)) {
v = true;
}
```
修改后的代码如下所示:
```
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.util.SQLConn"%>
<%@page import="java.sql.*" %>
<%@page import="java.sql.Statement" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登陆跳转servlet</title>
<!-- <link rel="stylesheet" type="text/css" href="styles.css"> -->
</head>
<body>
<%-- 获取前端数据 --%>
<%
String usernum = request.getParameter("usernum");
String userpwd = request.getParameter("userpwd");
%>
<%-- 定义SQLConn类和INSERT_SQL常量 --%>
<%
SQLConn sqlConn = new SQLConn();
sqlConn.openDB(); //打开数据库
String sql = "select UserId,Code from User_ZC";
ResultSet rs = sqlConn.execQuery(sql);
boolean v = false;
while(rs.next()){
if(rs.getString("UserId").equals(usernum) && rs.getString("Code").equals(userpwd)) {
v = true;
}
}
rs.close();
sqlConn.closeDB();
if(v){
request.getRequestDispatcher("ZCS.jsp").forward(request, response);
} else {
request.getRequestDispatcher("ZCB.jsp").forward(request, response);
}
%>
</body>
</html>
```
rivate static void export(HttpServletResponse response, File file, String fileName, if (response != null) { // 前端导出 try { write(response, book, fileName); } catch (IOException e) { e.printStackTrace(); } } else { // 本地导出 FileOutputStream fos; try { fos = new FileOutputStream(file); ByteArrayOutputStream ops = new ByteArrayOutputStream(); book.write(ops); fos.write(ops.toByteArray()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } Map<String, List<List<Object>>> sheetMap, Map<Integer, List<String>> selectMap) { // 整个 Excel 表格 book 对象 SXSSFWorkbook book = new SXSSFWorkbook(); // 每个 Sheet 页 Set<Entry<String, List<List<Object>>>> entries = sheetMap.entrySet(); for (Entry<String, List<List<Object>>> entry : entries) { List<List<Object>> sheetDataList = entry.getValue(); Sheet sheet = book.createSheet(entry.getKey()); Drawing<?> patriarch = sheet.createDrawingPatriarch();
这段代码是一个Excel导出的实现,其中包含了两种导出方式:前端导出和本地导出。具体实现如下:
1. 首先创建一个SXSSFWorkbook对象,表示整个Excel表格。
2. 遍历sheetMap中的每个Sheet页,创建对应的Sheet对象,并将Sheet页的名称设置为entry.getKey()。
3. 对于每个Sheet页,遍历其对应的数据列表sheetDataList,创建对应的行和单元格,并将数据填充到单元格中。
4. 对于每个Sheet页,如果有需要下拉选择的单元格,将其加入到数据验证中。
5. 如果response不为空,则表示前端导出,将book写入response流中。否则,表示本地导出,将book写入文件中。
下面是代码的具体实现:
```java
private static void export(HttpServletResponse response, File file, String fileName,
Map<String, List<List<Object>>> sheetMap, Map<Integer, List<String>> selectMap) {
// 整个 Excel 表格 book 对象
SXSSFWorkbook book = new SXSSFWorkbook();
// 每个 Sheet 页
Set<Entry<String, List<List<Object>>>> entries = sheetMap.entrySet();
for (Entry<String, List<List<Object>>> entry : entries) {
List<List<Object>> sheetDataList = entry.getValue();
Sheet sheet = book.createSheet(entry.getKey());
Drawing<?> patriarch = sheet.createDrawingPatriarch();
// 遍历每一行数据
for (int i = 0; i < sheetDataList.size(); i++) {
Row row = sheet.createRow(i);
List<Object> rowDataList = sheetDataList.get(i);
// 遍历每个单元格
for (int j = 0; j < rowDataList.size(); j++) {
Cell cell = row.createCell(j);
Object cellData = rowDataList.get(j);
// 判断单元格数据类型,并设置单元格格式
if (cellData instanceof String) {
cell.setCellValue((String) cellData);
} else if (cellData instanceof Number) {
cell.setCellValue(((Number) cellData).doubleValue());
} else if (cellData instanceof Date) {
cell.setCellValue((Date) cellData);
CellStyle style = book.createCellStyle();
style.setDataFormat(book.getCreationHelper().createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
cell.setCellStyle(style);
} else if (cellData instanceof Calendar) {
cell.setCellValue((Calendar) cellData);
CellStyle style = book.createCellStyle();
style.setDataFormat(book.getCreationHelper().createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
cell.setCellStyle(style);
} else if (cellData instanceof Boolean) {
cell.setCellValue((Boolean) cellData);
} else if (cellData == null) {
cell.setCellValue("");
}
// 设置下拉选择
if (selectMap.containsKey(j)) {
List<String> selectList = selectMap.get(j);
DataValidationHelper helper = sheet.getDataValidationHelper();
DataValidationConstraint constraint = helper.createExplicitListConstraint(selectList.toArray(new String[0]));
CellRangeAddressList addressList = new CellRangeAddressList(cell.getRowIndex(), cell.getRowIndex(), cell.getColumnIndex(), cell.getColumnIndex());
DataValidation validation = helper.createValidation(constraint, addressList);
sheet.addValidationData(validation);
}
}
}
}
// 导出Excel
if (response != null) {
// 前端导出
try {
write(response, book, fileName);
} catch (IOException e) {
e.printStackTrace();
}
} else {
// 本地导出
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
ByteArrayOutputStream ops = new ByteArrayOutputStream();
book.write(ops);
fos.write(ops.toByteArray());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
其中,write()方法用于将book写入response流中,实现前端导出。具体实现如下:
```java
private static void write(HttpServletResponse response, SXSSFWorkbook book, String fileName) throws IOException {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
OutputStream os = response.getOutputStream();
book.write(os);
os.flush();
os.close();
}
```