自定義物件的mysql輸出
1、首先,自定義物件,該物件需要實現序列化功能才可以在網路上執行,實現序列化功能需要繼承 java.io.Serializable 這個介面,
這個介面定義了空方法,不需要實現任何功能,表示具有序列化功能的一個空介面
不過需要定義一個序列號,例如如下:
private static final long serialVersionUID = 1L;
然而,hadoop中關於序列化物件的方法有一個需要實現readFields(ResultSet resultSet)和write(PreparedStatement preparedStatement)的
介面DBWritable,實現了該介面的物件方可在reducer和mapper中進行物件的儲存。
例如:
@Override
public void write(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setString(1, time);
preparedStatement.setInt(2, sum);
preparedStatement.setInt(3, workSum);
preparedStatement.setDouble(4, rate);
}
@Override
public void readFields(ResultSet resultSet) throws SQLException {
resultSet.getString(1);
resultSet.getInt(2);
resultSet.getInt(3);
resultSet.getDouble(4);
}
2、定義輸出型別為實現了序列化的型別
3、配置Job的輸出型別
先建立連線,配置資料庫的驅動位置
配置資料庫的url位置
配置資料庫的賬戶和密碼
config.set(DBConfiguration.DRIVER_CLASS_PROPERTY,"com.mysql.jdbc.Driver");
config.set(DBConfiguration.URL_PROPERTY,"jdbc:mysql://localhost:3306/test");
config.set(DBConfiguration.USERNAME_PROPERTY, "root");
config.set(DBConfiguration.PASSWORD_PROPERTY, "111111");
配置輸出的資料表以及其中的內容,如下格式:
DBOutputFormat.setOutput(job_name, table_name, attribute_name1, attribute_name2, attribute_name3....);
如下例子:
DBOutputFormat.setOutput(job, "t_car", "time", "sum", "work_sum", "rate");