使用Spark 1.6.1版本我需要在列上获取不同的值,然后在其上执行一些特定的转换.该列包含超过5000万条记录,并且可以变大.
我知道做一个distinct.collect()会把呼叫带回驱动程序.目前我正在执行如下任务,是否有更好的方法?
import sqlContext.implicits._
preProcessedData.persist(StorageLevel.MEMORY_AND_DISK_2)
preProcessedData.select(ApplicationId).distinct.collect().foreach(x => {
val applicationId = x.getAs[String](ApplicationId)
val selectedApplicationData = preProcessedData.filter($"$ApplicationId" === applicationId)
// DO SOME TASK PER applicationId
})
preProcessedData.unpersist()
Run Code Online (Sandbox Code Playgroud) scala dataframe apache-spark apache-spark-sql spark-dataframe
为了将大型 SQL 数据加载到 Spark 进行转换和 ML,以下哪个选项在性能方面更好。
选项 1:使用 Spark SQL JDBC 连接器将 SQLData 直接加载到 Spark。
选项2:使用Sqoop以csv格式将SQLData加载到HDFS,然后使用Spark从HDFS读取数据。
请提出将大型 SQL 数据加载到 Spark 的好方法。
我有 2 个大数据帧要根据关联键进行合并。使用join需要更长的时间才能完成任务。
我看到cogroup在 Apache Spark中使用优于加入。任何人都可以指出如何cogroup在 DataFrames上使用或建议更好的方法来合并 2 个大型 DataFrames。
谢谢