我试图弄清楚为什么DO $$
BEGIN
IF EXISTS (SELECT 1 FROM pg_database WHERE datname = 'xdb') THEN
RAISE NOTICE 'Database already exists';
ELSE
RAISE NOTICE 'Database does not exist';
PERFORM dblink_exec('dbname=' || current_database()||' user=puser' -- current db
, 'CREATE DATABASE "ydb" with owner puser');
END IF;
END $$;
\connect 'xdb' ---->> This DB should be either xdb or ydb based on the above condition
## Other insert statements
和更多的 Spark 保存功能似乎在后台使用了 MapReduce 。这是源代码:
RDD.scala
saveAsText
PairRDDFunctions.scala
因此基本上可以将成对的RDD转换为PairRDD以便调用 def saveAsTextFile(path: String): Unit = withScope {
val nullWritableClassTag = implicitly[ClassTag[NullWritable]]
val textClassTag = implicitly[ClassTag[Text]]
val r = this.mapPartitions { iter =>
val text = new Text()
iter.map { x =>
text.set(x.toString)
(NullWritable.get(), text)
}
}
RDD.rddToPairRDDFunctions(r)(nullWritableClassTag, textClassTag, null)
.saveAsHadoopFile[TextOutputFormat[NullWritable, Text]](path)
}
函数:
saveAsHadoopFile
据我了解,它肯定是尝试配置MapReduce作业,设置outputKey,outputValue等。
有人可以向我解释:
答案 0 :(得分:0)
它肯定试图配置MapReduce作业,设置outputKey,outputValue等。
不完全是。它正在设置Hadoop配置,但这并不意味着它正在设置MapReduce作业。 Hadoop本身包含多个不同的组件,而其中的许多组件都未与MapReduce紧密绑定。许多这样的项目(例如HDFS接口或安全组件)用于许多不同的项目。
Spark保存和MapReduce保存之间的主要区别是什么
这里没有。通常,当Spark与文件系统交互时,它会使用相关的Hadoop组件。但是,这些独立于MapReduce组件,不应与Hadoop MR作业混淆。