Spark分区上的数据框withColumn

时间:2018-02-05 16:46:32

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

数据框中的“colA”列包含整数值:

+-----+
| colA|
+-----+
|    1|
|    2|
|    1|
|    3|
+-----+

这些整数值可以通过Redis字典映射到字符串:

+----+------+
| key| value|
+----+------+
|   1|     a|
|   2|     b|
|   3|     c|
+----+------+

我需要创建一个新列“colB”,它将包含“colA”到字符串值的映射:

+-----+-----+
| colA| colB|
+-----+-----+
|    1|    a|
|    2|    b|
|    1|    a|
|    3|    c|
+-----+-----+

我的目标是向Redis发出批量请求,以避免每行单个Redis请求的延迟。

在Spark Core API(即RDD)中,我可以使用mapPartitions函数执行此操作。有没有办法通过使用Spark SQL API来实现相同的目标?

请注意,我希望避免以下开销:

  • 将数据帧转换为RDD,反之亦然。
  • 通过直接调用mapPartitions来关联编码器 数据帧。

1 个答案:

答案 0 :(得分:0)

  

请注意,我希望避免以下开销:

     
      
  • ...
  •   
  • 通过直接在数据帧上调用mapPartitions来关联编码器。
  •   

这实际上使它变得不可能。任何不使用SQL DSL的操作都需要解码为外部类型并编码回内部类型。对于原始值,如果使用二进制编码器,则它是低成本操作,但它仍然需要Encoder