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