Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Scala Spark:转换数据帧_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala Spark:转换数据帧

Scala Spark:转换数据帧,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我在Scala中使用Spark 1.6.1 我有一个数据帧,我想创建不同的数据帧,只想读取一次 例如,一个数据框有两列ID和TYPE,我想创建两个数据框,一个数据框的值为TYPE=A,另一个数据框的值为TYPE=B 我检查了stackoverflow上的另一篇文章,但只找到了读取数据帧2次的选项。 但是,我想要另一个性能最好的解决方案 向你问好 如果对数据执行多个操作,Spark将多次从数据源读取数据。避免这种情况的方法是使用cache()。这样,数据将在第一次操作后保存到内存中,这将使后续操作

我在Scala中使用Spark 1.6.1

我有一个数据帧,我想创建不同的数据帧,只想读取一次

例如,一个数据框有两列ID和TYPE,我想创建两个数据框,一个数据框的值为TYPE=A,另一个数据框的值为TYPE=B

我检查了stackoverflow上的另一篇文章,但只找到了读取数据帧2次的选项。 但是,我想要另一个性能最好的解决方案


向你问好

如果对数据执行多个操作,Spark将多次从数据源读取数据。避免这种情况的方法是使用
cache()
。这样,数据将在第一次操作后保存到内存中,这将使后续操作更快地使用数据

您的两个数据帧可以通过这种方式创建,只需要读取一次数据源

val df = spark.read.csv(path).cache()

val dfA = df.filter($"TYPE" === "A").drop("TYPE")
val dfB = df.filter($"TYPE" === "B").drop("TYPE")

“TYPE”列被删除,因为在分离之后它应该是不必要的。

您所说的读取1次是什么意思?是否不可能读取一次并直接重定向指定数据帧的行。就像使用foreach并在相应的数据帧中插入行一样。@BiCCThor这很可能没有这种方法有效。这需要使用
map
并自己构建数据帧,Spark将无法优化这样的操作。好的,谢谢,我想知道最好的方法是缓存数据帧并读取n次。“知道”不是最有效的,但它是最有效的吗?使用此数据帧创建一个缓存,并为要拆分的每种类型读取n次。@BiCCThor缓存数据帧时,将只进行一次读取,这是最有效的。另一种选择是根本不拆分它,而是使用不同的
groupBy
方法和聚合函数来获得您想要的结果。