如何将spark中的DataFrame转换为HadoopRDD

时间:2017-04-06 07:49:55

标签: scala apache-spark amazon-dynamodb

我喜欢将数据帧写入sparkod到dynamodb。 所以我使用rdd.saveAsHadoopDataset(JobConf)。但是rdd类型不匹配。它需要类型为hadoopRDD的rdd.So我喜欢将数据帧转换为rdd.I使用了df.rdd这给了我rdd但不是hadoopRDD。我正在使用spark-scala API。如果有任何更好的方法可以从Spark中将Dataframe写入Dyanmodb,这将有所帮助。

2 个答案:

答案 0 :(得分:2)

您无需转换RDD。

由于Hadoop API是围绕键值对构建的,因此Spark会自动包装关于RDD的PairRDDFunctions(这会增加额外的功能),其中数据存储在Tuple2个对象中。因此,您只需将数据放入RDD[(T,V)],然后就可以使用saveAsHadoopDataset方法。

以下是一个例子:

import org.apache.hadoop.mapred.JobConf
val tupleRDD : RDD[(Int, Int)] = sc.parallelize(Array((1,2), (3,4), (5,6)))
val jobConf = new JobConf()

设置任何需要设置。

tupleRDD.saveAsHadoopDataset(jobConf)

答案 1 :(得分:0)

如果有人正在寻找将spark-scala写入dyanmodb的数据帧。然后以下可能会有所帮助。

import com.amazonaws.services.dynamodbv2.document.Item
import com.amazonaws.services.dynamodbv2.document.DynamoDB

var json_arr=df.toJSON.collect() //Convert dataframe to json array
val table = dynamoDB.getTable("table_name") //dynamoDB is connection to dynamodb
for (element <- json_arr) {
      val item = Item.fromJSON(element)
      table.putItem(item)
    }