1

このスクリプトを実行してファイルをテキスト形式で保存することはできますが、saveAsSequenceFile を実行しようとするとエラーが発生します。RDDをシーケンスファイルとして保存する方法を知っている人がいる場合は、そのプロセスを教えてください. 「Learning Spark」と公式のSparkドキュメントで解決策を探してみました。

これは正常に実行されます

dataRDD = sc.textFile("/user/cloudera/sqoop_import/departments")
dataRDD.saveAsTextFile("/user/cloudera/pyspark/departments")

これは失敗します

dataRDD = sc.textFile("/user/cloudera/sqoop_import/departments")
dataRDD.saveAsSequenceFile("/user/cloudera/pyspark/departmentsSeq")

エラー: z:org.apache.spark.api.python.PythonRDD.saveAsSequenceFile の呼び出し中にエラーが発生しました。: org.apache.spark.SparkException: タイプ java.lang.String の RDD 要素は使用できません

データは次のとおりです。

2,Fitness
3,Footwear
4,Apparel
5,Golf
6,Outdoors
7,Fan Shop
8,TESTING
8000,TESTING
4

2 に答える 2

6

シーケンス ファイルはキーと値のペアを格納するために使用されるため、単純に格納することはできませんRDD[String]。あなたのデータを考えると、次のようなものを探していると思います:

rdd = sc.parallelize([
    "2,Fitness", "3,Footwear", "4,Apparel"
])
rdd.map(lambda x: tuple(x.split(",", 1))).saveAsSequenceFile("testSeq")

文字列全体を保持したい場合は、Noneキーを使用してください:

rdd.map(lambda x: (None, x)).saveAsSequenceFile("testSeqNone")
于 2015-12-28T10:50:55.290 に答える