自定義對象的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");
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章