SparkはJDBCを読んでデータを事前にフィルタリングします。

2987 ワード

Mysqlの読み取り方法を参照してください。
http://blog.csdn.net/baifanwudi/article/details/78559177
このような需要があります。mysqlのある表のある日のデータを読みます。
        String beginTime = day+ " 00:00:00";
        String endTime = day + " 23:59:59";
        Dataset jdbcTable=spark.read().format("jdbc")
                .option("url", PropertiesConfig.URL)
                .option("dbtable",tableName)
                .option("user",PropertiesConfig.USERNAME)
                .option("password",PropertiesConfig.PASSWORD).load().filter("create_time between '"+beginTime+"' and '"+endTime+"'");
sparkを発見したのは、このtable Nameのすべてのデータをsparkにロードしてからfilterするので、スピードが遅いです。だから、先にフィルタしてもいいですか?やっと方法を見つけました。
    String tableName= "(select * from device_info where create_time between '"+ beginTime + "' and '" + endTime + "' ) as device_time_filter";

    Dataset jdbcTable=spark.read().format("jdbc")
                .option("url", PropertiesConfig.URL)
                .option("dbtable",tableName)
                .option("user",PropertiesConfig.USERNAME)
                .option("password",PropertiesConfig.PASSWORD).load().
このmysql時計のcreateだけでいいです。timeはindexを建てて、効率はとても速いです。原理は先にmysqlからdeviceを濾過して読みます。info張表はdevice_と改めて命名されました。time_filter.