私は2つのcsvファイルを持っています.1つは映画のためのキーワードを含み、もう1つはキャストとクルーを含みます。 keywords.csv
ファイルには、次のようになります。スパークをひどく誤ってcsvを誤って修正する方法はありますか?
$ head -n 3 keywords.csv
id,keywords
862,"[{'id': 931, 'name': 'jealousy'}, {'id': 4290, 'name': 'toy'}, {'id': 5202, 'name': 'boy'}, {'id': 6054, 'name': 'friendship'}, {'id': 9713, 'name': 'friends'}, {'id': 9823, 'name': 'rivalry'}, {'id': 165503, 'name': 'boy next door'}, {'id': 170722, 'name': 'new toy'}, {'id': 187065, 'name': 'toy comes to life'}]"
8844,"[{'id': 10090, 'name': 'board game'}, {'id': 10941, 'name': 'disappearance'}, {'id': 15101, 'name': ""based on children's book""}, {'id': 33467, 'name': 'new home'}, {'id': 158086, 'name': 'recluse'}, {'id': 158091, 'name': 'giant insect'}]"
credits.csv
ファイルには、次のようになります。
pandas
は何の問題を持っていないCSVを形成している
$ head -n 2 credits.csv
cast,crew,id
"[{'cast_id': 14, 'character': 'Woody (voice)', 'credit_id': '52fe4284c3a36847f8024f95', 'gender': 2, 'id': 31, 'name': 'Tom Hanks', 'order': 0, 'profile_path': '/pQFoyx7rp09CJTAb932F2g8Nlho.jpg'}, {'cast_id': 15, 'character': 'Buzz Lightyear (voice)', 'credit_id': '52fe4284c3a36847f8024f99', 'gender': 2, 'id': 12898, 'name': 'Tim Allen', 'order': 1, 'profile_path': '/uX2xVf6pMmPepxnvFWyBtjexzgY.jpg'}]", 1
に読んスパークは、このようにそれらを読み取ります
spark.read
.option("quote", "\"")
.option("delimiter", ",")
.option("header", "true")
.csv("keywords.csv")
.show(2)
出力:
+-------+--------------------+
|movieId| keywords|
+-------+--------------------+
| 862|[{'id': 931, 'nam...|
| 8844|"[{'id': 10090, '...|
+-------+--------------------+
明らかに第1行目と第2行目の矛盾があります("
文字の有無に注意してください)。これは、文字列置換を含む単純なudfで修正できます。
credits.csv
にとってはしかし恐ろしくうまくいかない:
spark.read
.option("quote", "\"")
.option("delimiter", ",")
.option("header", "true")
.csv("credits.csv")
.show(2)
出力:(可能であれば)
+--------------------+--------------------+--------------------+
| cast| crew| movieId|
+--------------------+--------------------+--------------------+
|[{'cast_id': 14, ...|"[{'credit_id': '...| 'profile_path': ...|
|[{'cast_id': 1, '...|[{'credit_id': '5...| 8844|
+--------------------+--------------------+--------------------+
列が壊れている...
は、どのように私は適切にこれを読むことができます列を壊すことなく?私は驚いてpandas
には問題はありませんが、スパークは悲惨に失敗します。あなたは間違ったエスケープ文字を使用する最初のファイルの場合
「creditits.csv」のサンプルは、額面で引用文字を使用すると仮定すると、2つのフィールドしかありません。 2つの辞書を含むリストのように見える最初のフィールド文字列。 2番目のフィールドは整数です。 –