Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark从整个模式Scala中读取_Scala_Dataframe_Apache Spark_Schema - Fatal编程技术网

Spark从整个模式Scala中读取

Spark从整个模式Scala中读取,scala,dataframe,apache-spark,schema,Scala,Dataframe,Apache Spark,Schema,我想创建一个Spark对象,它可以读取整个模式,而不是该模式中的一个表。这是因为我想执行一个特定的查询,该查询连接多个表,而我不想单独从每个表中读取,并使用Spark手动重新创建查询,因为查询既长又复杂。我希望它能像这样工作: val Schema_DF = spark.read .format("jdbc") .option("url", "jdbc://example.com") .option("

我想创建一个Spark对象,它可以读取整个模式,而不是该模式中的一个表。这是因为我想执行一个特定的查询,该查询连接多个表,而我不想单独从每个表中读取,并使用Spark手动重新创建查询,因为查询既长又复杂。我希望它能像这样工作:

val Schema_DF = spark.read
    .format("jdbc")
    .option("url", "jdbc://example.com")
    .option("schema", "SCHEMA_NAME")
    .option("user", "username")
    .option("password", "pass")
    .load()
我可以使用不同的方法将我想要的查询加载为ResultSet,但这似乎很冗长,因为我需要将其转换为Dataframe。任何帮助都将不胜感激


干杯

您不需要将整个模式加载到spark中即可完成此操作

您可以使用query属性查询数据库并将结果作为数据帧获取

val jdbcDF = spark.read.format("jdbc")
.option("url", jdbcUrl)
.option("query", "select c1, c2 from t1")
.load()
参考:


注意:Spark将此查询推送到您的数据库,即您的数据库将处理该查询,Spark将仅获取结果。如果是您的live prod数据库,请务必小心:

您的方法只加载一个数据帧,因此实际上这不会加载所有表。你查过了吗我知道这是Python,但对Scala来说几乎是一样的。加载所有表然后在Spark中进行连接的目的是什么?直接在数据库上执行不是更有效吗?还是我在你的工作流程中遗漏了什么?嗨,谢谢你的评论。我已经将每个表作为单独的数据帧单独加载,并在Spark中手动完成连接。这个问题的目的是能够按原样执行整个查询,并验证我在Spark中完成的手动连接是否生成正确的输出。我已经能够执行查询并将结果存储为Scala中的ResultSet,但是很难将ResultSet与Dataframe进行比较,因此我尝试将整个模式连接为Dataframe,以便两个表的类型相同。让我知道这是否合理?谢谢!!如果使用较小的查询,这种方法效果很好,但每次尝试使用较大的查询时,都会出现错误:com.ibm.db2.jcc.am.SqlSyntaxErrorException:db2sql错误:SQLCODE=-199,SQLSTATE=42601,SQLERRMC=with;在CONCAT | | |/-+上使用INTERSECT-MINUS和UNION-FETCH,DRIVER=3.72.44时,精确查询在客户端上运行良好,但在我尝试通过Spark加载时失败。有什么想法吗?我投了赞成票,只是没有太多的声誉:很遗憾,我不能显示查询,因为查询很长,包含机密信息,但它基本上只是一系列左连接,左外连接和一些标准在没有看到查询的情况下真的帮不上忙。几点提示:1。尝试像spark那样运行查询,即从spark\u gen\u别名中选择。将替换为您的查询并在客户端中尝试。2检查是否有任何转义或引号破坏了查询3最坏的情况:从较小的查询开始,并在spark中不断更正它,然后慢慢使其变得复杂感谢您的帮助。2是我目前正在做的事情