繁体   English   中英

使用 Spark / java 在 dataframe 中加载查询的 ResultSet

[英]Load the ResultSet of query in dataframe using Spark / java

我想在 dataframe Spark 中加载 select 查询的结果集。

我正在使用以下代码:

public static void func (Dataset <Row> df){
    df.repartition(20); //one connection per partition, see below

    df.foreachPartition((Iterator<Row> t) -> {
        Connection conn = DriverManager.getConnection("url",
                "root", "");

        conn.setAutoCommit(true);
        Statement statement = conn.createStatement();

        final int batchSize = 100000;
        int i = 0;
        while (t.hasNext()) {
            Row row = t.next();
            try {

              ResultSet query =   statement.executeQuery("SELECT * FROM zones WHERE zones.id IN ("
                        +"'"  + row.getAs("idZones")
                        + "'"+ ")  ");

     

            }  catch (SQLException e) {
                e.printStackTrace();
            } finally {
              
            }
        }

        statement.close();
        conn.close();


    });

}

是否可以在 dataframe 中加载 ResultSet?

我需要你的帮助

谢谢你。

如果我正确理解您的问题,您想在数据框中加载 SQL 表。 为此,您需要执行以下操作:

  1. 创建 sparkSession 的sparkSession
  2. 将您的 JDBC 连接放在Properties object 中。
  3. 通过read方法加载SQL表。
  4. 您可以根据加载的数据框应用相关过滤器。

请在下面找到代码作为示例。

import org.apache.spark.SparkConf;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.functions;

import java.util.Properties;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ReadFromSQLTable {
    public static void main(String[] args) {
        String applicationName = ReadFromSQLTable.class.getName();
        SparkConf sparkConf = new SparkConf().setAppName(applicationName).setMaster("local[2]");
        // using Dataset<Row>
        SparkSession sparkSession = SparkSession
                .builder()
                .config(sparkConf)
                .getOrCreate();


        Properties connectionProperties = new Properties();

        connectionProperties.put("user", "root"); // user name of your SQL database
        connectionProperties.put("password", "password"); // password of SQL
        connectionProperties.setProperty("driver", "com.mysql.cj.jdbc.Driver");
// Name of the database that i am interacting with is `test`. You will find this as part of URL.
// Name of table that I want to load is the `employee`
        Dataset<Row> employeeDetail = sparkSession.read().jdbc("jdbc:mysql://127.0.0.1:3306/test",
                "employee", connectionProperties);

        log.error("Printing table detail");
        employeeDetail.show(); // to show the dataset loaded on the console
        long count = employeeDetail.count();
        System.out.println("The count is = " + count);
        Dataset<Row> employeeDetail2 = employeeDetail.filter("employee_number < 2");
        employeeDetail2.show();
}

您可以对这些 dataframe 应用任何类型的操作,例如过滤器 select 或任何其他 SQL 操作。

我在本地系统中运行此代码。 我在代码中添加了注释,以便您轻松理解。 如果您有任何疑问,请告诉我。

我希望这能让您对如何开始将 SQL 表加载为 dataframe 有一个公平的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM