首页 > 解决方案 > 将 chess.com 玩家游戏数据读入 spark 数据框

问题描述

我使用 chess.com API 来收集玩家的游戏数据。API 提供 JSON 响应,我将此 JSON 响应保存为 CSV 文件。

将游戏数据保存为 CSV 文件格式的代码:

data-url= https://api.chess.com/pub/player/erik/games
games= requests.get(data-url).json()
df= pd.json_normalize(games['games'])
df['poi']= 'erik'
df.to_csv('data.csv', index=False)

现在,如果我将此文件读入 pandas 数据框,它就可以工作。但是,当我将同一个文件读入 spark 数据框时,我的所有数据都在第一列中,而所有其他列都没有。

我该如何解决?非常感谢任何相关的建议。

Spark 将文件读入 spark 数据帧代码:

df = spark.read.format("csv").load(
r'/media/disk2/isb_ras/sachin/chess/matches/games_larrygm.csv',header=True)

更新:

我意识到问题是由数据文件的 PGN 字段中的数据引起的。我将数据文件读入 pandas 数据框中,删除了 pgn 功能,并将其保存到一个新文件中。然后我将新文件读入 Spark 数据帧,它工作了。

当我从熊猫的数据框中打印第一个值时,样本 PGN 数据:

'[Event "Live Chess"]\n[Site "Chess.com"]\n[Date "2011.12.01"]\n[Round "-"]\n[White "-KingOfTheCastle-"]\n[Black "lambruskice"]\n[Result "1-0"]\n[CurrentPosition "rnbq1bnr/pp1p2p1/4kp2/2pQ1N1B/4P3/8/PPP2PPP/RNB1K2R b KQ -"]\n[Timezone "UTC"]\n[ECO "C40"]\n[ECOUrl "https://www.chess.com/openings/Kings-Pawn-Opening-Kings-Knight-Damiano-Defense"]\n[UTCDate "2011.12.01"]\n[UTCTime "19:07:25"]\n[WhiteElo "1350"]\n[BlackElo "1153"]\n[TimeControl "600"]\n[Termination "-KingOfTheCastle- won by checkmate"]\n[StartTime "19:07:25"]\n[EndDate "2011.12.01"]\n[EndTime "19:08:34"]\n[Link "https://www.chess.com/game/live/213529090"]\n\n1. e4 {[%clk 0:10:00]} 1... e5 {[%clk 0:10:00]} 2. Nf3 {[%clk 0:09:57.9]} 2... f6 {[%clk 0:09:58]} 3. d4 {[%clk 0:09:49.8]} 3... exd4 {[%clk 0:09:55.9]} 4. Nxd4 {[%clk 0:09:48.4]} 4... h5 {[%clk 0:09:52.6]} 5. Be2 {[%clk 0:09:44.8]} 5... c5 {[%clk 0:09:42.1]} 6. Bxh5+ {[%clk 0:09:39.4]} 6... Ke7 {[%clk 0:09:32.4]} 7. Nf5+ {[%clk 0:09:36.1]} 7... Ke6 {[%clk 0:09:25.6]} 8. Qd5# {[%clk 0:09:29.5]} 1-0\n'

此 pgn 信息中有很多特殊字符。但是没有逗号。现在,我如何通过确保 PGN 被视为 pgn 列的一个单一条目来将此文件读入 spark 数据帧。

标签: pythonapache-sparkpysparkapache-spark-sql

解决方案


推荐阅读