[英]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 表。 为此,您需要执行以下操作:
sparkSession
。Properties
object 中。请在下面找到代码作为示例。
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.