我确信这是一个简单的SQLContext问题,但我在Spark docs或Stackoverflow中找不到任何答案
我想从MySQL上的SQL查询创建一个Spark数据框
例如,我有一个复杂的MySQL查询,如
SELECT a.X,b.Y,c.Z FROM FOO as a JOIN BAR as b ON ... JOIN ZOT as c ON ... WHERE ...
我想要一个带有X、Y和Z列的数据帧
我想出了如何将整个表加载到Spark中,然后可以将它们全部加载,然后在那里进行连接和选择。然而,这是非常低效的。我只想加载SQL查询生成的表。
这是我当前代码的近似值,这不起作用。MySQL连接器有一个选项“dbtable”,可用于加载整个表。我希望有某种方法可以指定查询
val df = sqlContext.format("jdbc").
option("url", "jdbc:mysql://localhost:3306/local_content").
option("driver", "com.mysql.jdbc.Driver").
option("useUnicode", "true").
option("continueBatchOnError","true").
option("useSSL", "false").
option("user", "root").
option("password", "").
sql(
"""
select dl.DialogLineID, dlwim.Sequence, wi.WordRootID from Dialog as d
join DialogLine as dl on dl.DialogID=d.DialogID
join DialogLineWordInstanceMatch as dlwim o n dlwim.DialogLineID=dl.DialogLineID
join WordInstance as wi on wi.WordInstanceID=dlwim.WordInstanceID
join WordRoot as wr on wr.WordRootID=wi.WordRootID
where d.InSite=1 and dl.Active=1
limit 100
"""
).load()
要将查询的输出保存到新的数据帧,只需将结果设置为变量:
val newDataFrame = spark.sql("SELECT a.X,b.Y,c.Z FROM FOO as a JOIN BAR as b ON ... JOIN ZOT as c ON ... WHERE ...")
现在newDataFrame
是一个具有所有可用数据帧功能的数据帧。
如果您已经在SQLContext中注册了表,那么只需使用sql方法即可。
val resultDF = sqlContext.sql("SELECT a.X,b.Y,c.Z FROM FOO as a JOIN BAR as b ON ... JOIN ZOT as c ON ... WHERE ...")
我在这里发现了这个通过Spark的批量数据迁移SQL
dbname参数可以是任何用别名包装在括号中的查询。所以在我的例子中,我需要这样做:
val query = """
(select dl.DialogLineID, dlwim.Sequence, wi.WordRootID from Dialog as d
join DialogLine as dl on dl.DialogID=d.DialogID
join DialogLineWordInstanceMatch as dlwim on dlwim.DialogLineID=dl.DialogLineID
join WordInstance as wi on wi.WordInstanceID=dlwim.WordInstanceID
join WordRoot as wr on wr.WordRootID=wi.WordRootID
where d.InSite=1 and dl.Active=1
limit 100) foo
"""
val df = sqlContext.format("jdbc").
option("url", "jdbc:mysql://localhost:3306/local_content").
option("driver", "com.mysql.jdbc.Driver").
option("useUnicode", "true").
option("continueBatchOnError","true").
option("useSSL", "false").
option("user", "root").
option("password", "").
option("dbtable",query).
load()
正如所料,将每个表作为其自己的数据帧加载并将它们连接到Spark中效率非常低。
这是获得SQL结果集的一个非常常见的方法,因为一对多的关系······对于一个相当简单的结构执行冗余查询似乎是不必要的(而且可能是低效的)。是否有一种已建立的简单的方法将其解析为java对象?也就是说,我不想迭代ResultSet类并为每一行创建和设置一个新对象,而是要迭代集合并为每一个父行创建一个新对象,为每一个子行创建一个新对象。 例如,一种方法是按父主键对查询进行排序,然后仅当父id更改时才
我在Mariadb有大量的数据。我需要从查询创建转储文件。到目前为止我有这样的东西。
问题内容: 因此,我试图通过SQL查询从Oracle SQL表中的数据创建一个 概率密度函数 。因此请考虑下表: 现在,如果我想根据该数据创建PDF,则需要计算每个客户在特定数量(0到50或50到100之间)花费的次数。一个示例图看起来像这样(原谅我可怜的ascii艺术): 因此,轴为: X轴:是水桶 Y轴:是客户数量 我目前正在使用Oracle SQL CASE函数 来确定支出是否在存储桶之内,
我正在尝试使用Apache Spark,以便将具有多个连接和子选择的(大型)SQL查询的结果加载到来自Spark的DataFrame中,如从SQL查询创建Spark Dataframe中所述。 不幸的是,我这样做的尝试导致了拼花错误: 线程“main”组织中出现异常。阿帕奇。火花sql。AnalysisException:无法推断拼花地板的架构。必须手动指定。 我从谷歌看到的信息表明,当数据帧为空
问题内容: 我有两个表命名和 我需要获得输出 问题答案: 此数据转换称为A ,从SQL Server 2005开始,具有将数据从行转换为列的功能。 有多种方法可以完成此操作,具体取决于您是否有要转换为列的静态数量的值。所有这些都涉及向数据添加a ,因此您可以返回任何产品的多行。 您可以将聚合函数与表达式一起使用: 参见带有演示的SQL Fiddle 您可以使用以下功能: 请参阅带有演示的SQL F
如何查询具有复杂类型(如映射/数组)的RDD?例如,当我编写此测试代码时: 我认为语法应该是这样的: 或 但我明白了 无法访问类型MapType(StringType,StringType,true)中的嵌套字段 和 组织。阿帕奇。火花sql。催化剂错误。包$TreeNodeException:未解析的属性 分别地