Spark - 应在架构中写入一次值

时间:2018-04-22 21:33:52

标签: scala apache-spark apache-spark-sql spark-dataframe

我们说我有以下架构:

<record>
 <long name="update"/>
 <string name="dc"/>
 <array name="clients">
   <record>
     <string name="ip"/>
     <array name="client_ids">
         <string name="client_id"/>
     </array>
   </record>
</record>

现在,正在使用具有多个shuffle分区的分布式查询来计算clients列。结果应该是包含信息的1个文件,并在其中&#34;更新&#34;和&#34; dc&#34;应该只出现一次,而不是每一行。

我尝试的是:

 val rdd = sql.sql(s"query to generate the clients column")
.map(some_adjustments)
.repartition(1)
.mapPartitions { rowsIt =>
    val clients = rowsIt.toArray 
    val result = mutable.WrappedArray.make[Row](Array(Row(update, dc,mutable.WrappedArray.make[Row](clients))))

    result.iterator
}

这样可行,但结果是OutOfMemory,可能是由于rowsIt.toArray。 执行相同的重新分区(1)但在每行上更新/ dc重复运行顺利。

0 个答案:

没有答案