Questions tagged «apache-spark-sql»

Apache Spark SQL是在快速通用集群计算系统Spark上进行“ SQL和结构化数据处理”的工具。它可用于从Hive,Parquet等检索数据,并在现有的RDD和数据集上运行SQL查询。

10
如何透视Spark DataFrame?
我开始使用Spark DataFrames,我需要能够旋转数据以在多行1列中创建多列。在Scalding中有内置的功能,我相信Python中的Pandas,但是对于新的Spark Dataframe我找不到任何东西。 我假设我可以编写某种自定义函数来执行此操作,但是我什至不确定如何开始,尤其是因为我是Spark的新手。我谁都知道如何使用内置功能来做到这一点,或者对如何在Scala中编写东西的建议,这一点深表感谢。


1
从Pyspark df到PostgresSQL写入超过5000万,这是最有效的方法
从Spark数据帧向Postgres Tables插入数百万条记录(例如5000万条)的最有效方法是。过去,我通过使用批量复制和批处理大小选项(从成功的火花到MSSQL)做到了这一点 。 Postgres是否有类似的东西? 添加我尝试过的代码以及运行该过程所花费的时间: def inserter(): start = timer() sql_res.write.format("jdbc").option("numPartitions","5").option("batchsize","200000")\ .option("url", "jdbc:postgresql://xyz.com:5435/abc_db") \ .option("dbtable", "public.full_load").option("user", "root").option("password", "password").save() end = timer() print(timedelta(seconds=end-start)) inserter() 因此,我对1000万条记录执行了上述方法,并按中指定的进行了5个并行连接,numPartitions并尝试了200k的批量大小。 该过程花费的总时间为0:14:05.760926(十四分五秒)。 还有其他有效的方法可以减少时间吗? 我可以使用的有效或最佳批次大小是多少?增加我的批量大小会更快地完成工作吗?还是打开多个连接,即> 5可以帮助我更快地完成此过程? 在一个平均14分钟10万条记录是不坏,但找的人在那里谁也以前做过这有助于回答这个问题。

1
Spark:UDF执行多次
我有一个带有以下代码的数据框: def test(lat: Double, lon: Double) = { println(s"testing ${lat / lon}") Map("one" -> "one", "two" -> "two") } val testUDF = udf(test _) df.withColumn("test", testUDF(col("lat"), col("lon"))) .withColumn("test1", col("test.one")) .withColumn("test2", col("test.two")) 现在检查日志,我发现每行UDF执行3次。如果我从“ test.three”列中添加“ test3”,则将再次执行UDF。 有人可以解释我为什么吗? 是否可以正确避免这种情况(即使添加了“测试”,也无需缓存数据框,即使这可行)?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.