Apache spark 从Spark中的数据帧筛选和选择数据
我正在开发一个Spark JDBC程序 到目前为止,我提出了以下代码:Apache spark 从Spark中的数据帧筛选和选择数据,apache-spark,Apache Spark,我正在开发一个Spark JDBC程序 到目前为止,我提出了以下代码: object PartitionRetrieval { var conf = new SparkConf().setAppName("Spark-JDBC") val log = LogManager.getLogger("Spark-JDBC Program") Logger.getLogger("org").setLevel(Level.ERROR) val conFile
object PartitionRetrieval {
var conf = new SparkConf().setAppName("Spark-JDBC")
val log = LogManager.getLogger("Spark-JDBC Program")
Logger.getLogger("org").setLevel(Level.ERROR)
val conFile = "/home/hmusr/ReconTest/inputdir/testconnection.properties"
val properties = new Properties()
properties.load(new FileInputStream(conFile))
val connectionUrl = properties.getProperty("gpDevUrl")
val devUserName = properties.getProperty("devUserName")
val devPassword = properties.getProperty("devPassword")
val driverClass = properties.getProperty("gpDriverClass")
val tableName = "source.bank_accounts"
try {
Class.forName(driverClass).newInstance()
} catch {
case cnf: ClassNotFoundException =>
log.error("Driver class: " + driverClass + " not found")
System.exit(1)
case e: Exception =>
log.error("Exception: " + e.printStackTrace())
System.exit(1)
}
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().config(conf).master("yarn").enableHiveSupport().getOrCreate()
val gpTable = spark.read.format("jdbc").option("url", connectionUrl)
.option("dbtable",tableName)
.option("user",devUserName)
.option("password",devPassword).load()
val rc = gpTable.filter(gpTable("source_system_name")==="ORACLE").count()
println("gpTable Count: " + rc)
}
}
在上面的代码中,语句:val gpTable=spark.read.format(“jdbc”).option(“url”,connectionUrl)
将table:bank\u accounts
的整个数据转储到DataFrame:gpTable
中,然后DataFrame:rc
获取过滤后的数据。我对表有这样的怀疑:bank_accounts是一个非常小的表,如果将其作为一个整体加载到内存中,则不会产生任何影响。但在我们的生产中,有数十亿条记录的表格。在这种情况下,建议使用JDBC连接将数据加载到数据帧中的方法是什么?
有人能告诉我Spark Jdbc的入门点的概念吗?-
声明会不会。。。将表:bank_accounts的全部数据转储到DataFrame:gpTable中,然后DataFrame:rc获取过滤后的数据
否。
不急切。它只定义数据绑定 此外,简单的谓词(如平凡相等)将检查推送到源代码,并且在执行计划时只加载所需的列 在数据库日志中,您应该看到类似的查询DataFrameReader
SELECT 1 FROM table WHERE source_system_name = 'ORACLE'
-
如果它作为一个整体作为数据帧加载到内存中
不可以。Spark不会在内存中加载数据,除非它被指示(主要是
),即使这样,它也会将自身限制为适合可用存储内存的块 在标准过程中,它只保留计算计划所需的数据。对于全局计划,内存占用不应取决于数据量缓存
- 在这种情况下,建议使用JDBC连接将数据加载到数据帧中的方法是什么 有关可伸缩性的问题,请检查 此外,你还可以阅读