Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 41.17 KB | None | 0 0
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 8,
  6. "metadata": {
  7. "collapsed": false
  8. },
  9. "outputs": [],
  10. "source": [
  11. "import math, time\n",
  12. "from dask.distributed import Client, wait"
  13. ]
  14. },
  15. {
  16. "cell_type": "code",
  17. "execution_count": 9,
  18. "metadata": {
  19. "collapsed": false
  20. },
  21. "outputs": [],
  22. "source": [
  23. "from distributed.client import default_client\n",
  24. "import pandas as pd\n",
  25. "\n",
  26. "def run(func, client=None):\n",
  27. " client = client or default_client()\n",
  28. " client.restart()\n",
  29. " n = sum(client.ncores().values())\n",
  30. " coroutine = func(n)\n",
  31. "\n",
  32. " name, unit, numerator = next(coroutine)\n",
  33. " out = []\n",
  34. " while True:\n",
  35. " # time.sleep(1)\n",
  36. " start = time.time()\n",
  37. " try:\n",
  38. " next_name, next_unit, next_numerator = next(coroutine)\n",
  39. " except StopIteration:\n",
  40. " break\n",
  41. " finally:\n",
  42. " end = time.time()\n",
  43. " record = {'name': name, \n",
  44. " 'duration': end - start, \n",
  45. " 'unit': unit + '/s', \n",
  46. " 'rate': numerator / (end - start), \n",
  47. " 'n': n,\n",
  48. " 'collection': func.__name__}\n",
  49. " out.append(record)\n",
  50. " name = next_name\n",
  51. " unit = next_unit\n",
  52. " numerator = next_numerator\n",
  53. " return pd.DataFrame(out)"
  54. ]
  55. },
  56. {
  57. "cell_type": "code",
  58. "execution_count": 10,
  59. "metadata": {
  60. "collapsed": true
  61. },
  62. "outputs": [],
  63. "source": [
  64. "import operator\n",
  65. "import time\n",
  66. "\n",
  67. "def slowinc(x, delay=0.1):\n",
  68. " time.sleep(delay)\n",
  69. " return x + 1\n",
  70. "\n",
  71. "def slowadd(x, y, delay=0.1):\n",
  72. " time.sleep(delay)\n",
  73. " return x + y\n",
  74. "\n",
  75. "def slowsum(L, delay=0.1):\n",
  76. " time.sleep(delay)\n",
  77. " return sum(L)\n",
  78. "\n",
  79. "def inc(x):\n",
  80. " return x + 1\n",
  81. "\n",
  82. "\n",
  83. "def tasks(n):\n",
  84. " yield 'task map fast tasks', 'tasks', n * 200\n",
  85. " \n",
  86. " futures = client.map(inc, range(n * 200))\n",
  87. " wait(futures)\n",
  88. " \n",
  89. " yield 'task map 100ms tasks', 'tasks', n * 100\n",
  90. "\n",
  91. " futures = client.map(slowinc, range(100 * n))\n",
  92. " wait(futures)\n",
  93. " \n",
  94. " yield 'task map 1s tasks', 'tasks', n * 4\n",
  95. "\n",
  96. " futures = client.map(slowinc, range(4 * n), delay=1)\n",
  97. " wait(futures)\n",
  98. "\n",
  99. " yield 'tree reduction fast tasks', 'tasks', 2**7 * n\n",
  100. " \n",
  101. " from dask import delayed\n",
  102. "\n",
  103. " L = range(2**7 * n)\n",
  104. " while len(L) > 1:\n",
  105. " L = list(map(delayed(operator.add), L[0::2], L[1::2]))\n",
  106. "\n",
  107. " L[0].compute()\n",
  108. " \n",
  109. " yield 'tree reduction 100ms tasks', 'tasks', 2**6 * n * 2\n",
  110. " \n",
  111. " from dask import delayed\n",
  112. "\n",
  113. " L = range(2**6 * n)\n",
  114. " while len(L) > 1:\n",
  115. " L = list(map(delayed(slowadd), L[0::2], L[1::2]))\n",
  116. "\n",
  117. " L[0].compute()\n",
  118. " \n",
  119. " yield 'sequential', 'tasks', 100\n",
  120. "\n",
  121. " x = 1\n",
  122. "\n",
  123. " for i in range(100):\n",
  124. " x = delayed(inc)(x)\n",
  125. " \n",
  126. " x.compute()\n",
  127. " \n",
  128. " yield 'dynamic tree reduction fast tasks', 'tasks', 100 * n\n",
  129. " \n",
  130. " from dask.distributed import as_completed\n",
  131. " futures = client.map(inc, range(n * 100))\n",
  132. " \n",
  133. " pool = as_completed(futures)\n",
  134. " batches = pool.batches()\n",
  135. " \n",
  136. " while True:\n",
  137. " try:\n",
  138. " batch = next(batches)\n",
  139. " if len(batch) == 1:\n",
  140. " batch += next(batches)\n",
  141. " except StopIteration:\n",
  142. " break\n",
  143. " future = client.submit(sum, batch)\n",
  144. " pool.add(future)\n",
  145. " \n",
  146. " yield 'dynamic tree reduction 100ms tasks', 'tasks', 100 * n\n",
  147. " \n",
  148. " from dask.distributed import as_completed\n",
  149. " futures = client.map(slowinc, range(n * 20))\n",
  150. " \n",
  151. " pool = as_completed(futures)\n",
  152. " batches = pool.batches()\n",
  153. " \n",
  154. " while True:\n",
  155. " try:\n",
  156. " batch = next(batches)\n",
  157. " if len(batch) == 1:\n",
  158. " batch += next(batches)\n",
  159. " except StopIteration:\n",
  160. " break\n",
  161. " future = client.submit(slowsum, batch)\n",
  162. " pool.add(future)\n",
  163. "\n",
  164. " \n",
  165. " yield 'nearest neighbor fast tasks', 'tasks', 100 * n * 2\n",
  166. " \n",
  167. " L = range(100 * n)\n",
  168. " L = client.map(operator.add, L[:-1], L[1:])\n",
  169. " L = client.map(operator.add, L[:-1], L[1:])\n",
  170. " wait(L)\n",
  171. " \n",
  172. " yield 'nearest neighbor 100ms tasks', 'tasks', 20 * n * 2\n",
  173. " \n",
  174. " L = range(20 * n)\n",
  175. " L = client.map(slowadd, L[:-1], L[1:])\n",
  176. " L = client.map(slowadd, L[:-1], L[1:])\n",
  177. " wait(L)"
  178. ]
  179. },
  180. {
  181. "cell_type": "code",
  182. "execution_count": 11,
  183. "metadata": {
  184. "collapsed": true
  185. },
  186. "outputs": [],
  187. "source": [
  188. "def arrays(n):\n",
  189. " import dask.array as da\n",
  190. " N = int(5000 * math.sqrt(n))\n",
  191. " x = da.random.randint(0, 10000, size=(N, N), chunks=(2000, 2000))\n",
  192. " \n",
  193. " yield 'create random', 'MB', x.nbytes / 1e6\n",
  194. " \n",
  195. " x = x.persist()\n",
  196. " wait(x)\n",
  197. " \n",
  198. " yield 'blockwise 100ms tasks', 'MB', x.nbytes / 1e6\n",
  199. " \n",
  200. " y = x.map_blocks(slowinc, dtype=x.dtype).persist()\n",
  201. " wait(y)\n",
  202. " \n",
  203. " yield 'random access', 'bytes', 8\n",
  204. " \n",
  205. " x[1234, 4567].compute()\n",
  206. " \n",
  207. " yield 'reduction', 'MB', x.nbytes / 1e6\n",
  208. " \n",
  209. " x.std().compute()\n",
  210. " \n",
  211. " yield 'reduction along axis', 'MB', x.nbytes / 1e6\n",
  212. " \n",
  213. " x.std(axis=0).compute()\n",
  214. " \n",
  215. " yield 'elementwise computation', 'MB', x.nbytes / 1e6\n",
  216. " \n",
  217. " y = da.sin(x) ** 2 + da.cos(x) ** 2\n",
  218. " y = y.persist()\n",
  219. " wait(y) \n",
  220. " \n",
  221. " yield 'rechunk small', 'MB', x.nbytes / 1e6\n",
  222. " \n",
  223. " y = x.rechunk((20000, 200)).persist()\n",
  224. " wait(y)\n",
  225. " \n",
  226. " yield 'rechunk large', 'MB', x.nbytes / 1e6\n",
  227. " \n",
  228. " y = y.rechunk((200, 20000)).persist()\n",
  229. " wait(y)\n",
  230. " \n",
  231. " yield 'transpose addition', 'MB', x.nbytes / 1e6\n",
  232. " y = x + x.T\n",
  233. " y = y.persist()\n",
  234. " wait(y)\n",
  235. " \n",
  236. " yield 'nearest neighbor fast tasks', 'MB', x.nbytes / 1e6\n",
  237. " \n",
  238. " y = x.map_overlap(inc, depth=1).persist()\n",
  239. " wait(y) \n",
  240. " \n",
  241. " yield 'nearest neighbor 100ms tasks', 'MB', x.nbytes / 1e6\n",
  242. " \n",
  243. " y = x.map_overlap(slowinc, depth=1, delay=0.1).persist()\n",
  244. " wait(y) "
  245. ]
  246. },
  247. {
  248. "cell_type": "code",
  249. "execution_count": 12,
  250. "metadata": {
  251. "collapsed": true
  252. },
  253. "outputs": [],
  254. "source": [
  255. "def dataframes(n):\n",
  256. " import dask.array as da\n",
  257. " import dask.dataframe as dd\n",
  258. " N = 2000000 * n\n",
  259. " \n",
  260. " x = da.random.randint(0, 10000, size=(N, 10), chunks=(1000000, 10))\n",
  261. "\n",
  262. " \n",
  263. " yield 'create random', 'MB', x.nbytes / 1e6\n",
  264. " \n",
  265. " df = dd.from_dask_array(x).persist()\n",
  266. " wait(df)\n",
  267. " \n",
  268. " yield 'blockwise 100ms tasks', 'MB', x.nbytes / 1e6\n",
  269. " \n",
  270. " wait(df.map_partitions(slowinc, meta=df).persist())\n",
  271. " \n",
  272. " yield 'arithmetic', 'MB', x.nbytes / 1e6\n",
  273. " \n",
  274. " y = (df[0] + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10).persist()\n",
  275. " wait(y)\n",
  276. " \n",
  277. " yield 'random access', 'bytes', 8\n",
  278. " \n",
  279. " df.loc[123456].compute()\n",
  280. " \n",
  281. " yield 'dataframe reduction', 'MB', x.nbytes / 1e6\n",
  282. " \n",
  283. " df.std().compute()\n",
  284. " \n",
  285. " yield 'series reduction', 'MB', x.nbytes / 1e6 / 10\n",
  286. " \n",
  287. " df[3].std().compute()\n",
  288. " \n",
  289. " yield 'groupby reduction', 'MB', x.nbytes / 1e6\n",
  290. " \n",
  291. " df.groupby(0)[1].mean().compute()\n",
  292. " \n",
  293. " yield 'groupby apply (full shuffle)', 'MB', x.nbytes / 1e6\n",
  294. " \n",
  295. " df.groupby(0).apply(len).compute()\n",
  296. " \n",
  297. " yield 'set index (full shuffle)', 'MB', x.nbytes / 1e6\n",
  298. " \n",
  299. " wait(df.set_index(1).persist())\n",
  300. " \n",
  301. " yield 'rolling aggregations', 'MB', x.nbytes / 1e6\n",
  302. " \n",
  303. " wait(df.rolling(5).mean().persist())"
  304. ]
  305. },
  306. {
  307. "cell_type": "code",
  308. "execution_count": null,
  309. "metadata": {
  310. "collapsed": true
  311. },
  312. "outputs": [],
  313. "source": [
  314. "L = []"
  315. ]
  316. },
  317. {
  318. "cell_type": "code",
  319. "execution_count": 13,
  320. "metadata": {
  321. "collapsed": false,
  322. "scrolled": true
  323. },
  324. "outputs": [
  325. {
  326. "name": "stdout",
  327. "output_type": "stream",
  328. "text": [
  329. "1 tasks\n",
  330. "1 arrays\n",
  331. "1 dataframes\n"
  332. ]
  333. },
  334. {
  335. "name": "stderr",
  336. "output_type": "stream",
  337. "text": [
  338. "/home/mrocklin/Software/anaconda/lib/python3.6/site-packages/ipykernel/__main__.py:41: UserWarning: `meta` is not specified, inferred from partial data. Please provide `meta` if the result is unexpected.\n",
  339. " Before: .apply(func)\n",
  340. " After: .apply(func, meta={'x': 'f8', 'y': 'f8'}) for dataframe result\n",
  341. " or: .apply(func, meta=('x', 'f8')) for series result\n"
  342. ]
  343. },
  344. {
  345. "name": "stdout",
  346. "output_type": "stream",
  347. "text": [
  348. "1 tasks\n",
  349. "1 arrays\n",
  350. "1 dataframes\n",
  351. "2 tasks\n",
  352. "2 arrays\n",
  353. "2 dataframes\n",
  354. "2 tasks\n",
  355. "2 arrays\n",
  356. "2 dataframes\n",
  357. "4 tasks\n",
  358. "4 arrays\n",
  359. "4 dataframes\n",
  360. "4 tasks\n",
  361. "4 arrays\n",
  362. "4 dataframes\n",
  363. "CPU times: user 1min 15s, sys: 8.1 s, total: 1min 23s\n",
  364. "Wall time: 4min 58s\n"
  365. ]
  366. }
  367. ],
  368. "source": [
  369. "%%time\n",
  370. "for n_workers in [1, 2, 4]:\n",
  371. " with Client(n_workers=n_workers, threads_per_worker=1, processes=True, diagnostics_port=None) as client:\n",
  372. " for i in range(2):\n",
  373. " for func in [tasks, arrays, dataframes]:\n",
  374. " print(n_workers, func.__name__)\n",
  375. " df = run(func, client=client)\n",
  376. " L.append(df)"
  377. ]
  378. },
  379. {
  380. "cell_type": "code",
  381. "execution_count": 14,
  382. "metadata": {
  383. "collapsed": true
  384. },
  385. "outputs": [],
  386. "source": [
  387. "ddf = pd.concat(L)"
  388. ]
  389. },
  390. {
  391. "cell_type": "code",
  392. "execution_count": 15,
  393. "metadata": {
  394. "collapsed": false,
  395. "scrolled": false
  396. },
  397. "outputs": [
  398. {
  399. "data": {
  400. "text/html": [
  401. "<div>\n",
  402. "<style>\n",
  403. " .dataframe thead tr:only-child th {\n",
  404. " text-align: right;\n",
  405. " }\n",
  406. "\n",
  407. " .dataframe thead th {\n",
  408. " text-align: left;\n",
  409. " }\n",
  410. "\n",
  411. " .dataframe tbody tr th {\n",
  412. " vertical-align: top;\n",
  413. " }\n",
  414. "</style>\n",
  415. "<table border=\"1\" class=\"dataframe\">\n",
  416. " <thead>\n",
  417. " <tr style=\"text-align: right;\">\n",
  418. " <th></th>\n",
  419. " <th></th>\n",
  420. " <th></th>\n",
  421. " <th></th>\n",
  422. " <th>duration</th>\n",
  423. " <th>rate</th>\n",
  424. " </tr>\n",
  425. " <tr>\n",
  426. " <th>collection</th>\n",
  427. " <th>name</th>\n",
  428. " <th>n</th>\n",
  429. " <th>unit</th>\n",
  430. " <th></th>\n",
  431. " <th></th>\n",
  432. " </tr>\n",
  433. " </thead>\n",
  434. " <tbody>\n",
  435. " <tr>\n",
  436. " <th rowspan=\"30\" valign=\"top\">arrays</th>\n",
  437. " <th rowspan=\"3\" valign=\"top\">blockwise 100ms tasks</th>\n",
  438. " <th>1</th>\n",
  439. " <th>MB/s</th>\n",
  440. " <td>1.029480</td>\n",
  441. " <td>194.274386</td>\n",
  442. " </tr>\n",
  443. " <tr>\n",
  444. " <th>2</th>\n",
  445. " <th>MB/s</th>\n",
  446. " <td>0.970075</td>\n",
  447. " <td>412.724335</td>\n",
  448. " </tr>\n",
  449. " <tr>\n",
  450. " <th>4</th>\n",
  451. " <th>MB/s</th>\n",
  452. " <td>0.911542</td>\n",
  453. " <td>879.661395</td>\n",
  454. " </tr>\n",
  455. " <tr>\n",
  456. " <th rowspan=\"3\" valign=\"top\">create random</th>\n",
  457. " <th>1</th>\n",
  458. " <th>MB/s</th>\n",
  459. " <td>0.405803</td>\n",
  460. " <td>492.852099</td>\n",
  461. " </tr>\n",
  462. " <tr>\n",
  463. " <th>2</th>\n",
  464. " <th>MB/s</th>\n",
  465. " <td>0.583153</td>\n",
  466. " <td>701.543327</td>\n",
  467. " </tr>\n",
  468. " <tr>\n",
  469. " <th>4</th>\n",
  470. " <th>MB/s</th>\n",
  471. " <td>0.785832</td>\n",
  472. " <td>1044.580052</td>\n",
  473. " </tr>\n",
  474. " <tr>\n",
  475. " <th rowspan=\"3\" valign=\"top\">elementwise computation</th>\n",
  476. " <th>1</th>\n",
  477. " <th>MB/s</th>\n",
  478. " <td>2.410327</td>\n",
  479. " <td>83.223446</td>\n",
  480. " </tr>\n",
  481. " <tr>\n",
  482. " <th>2</th>\n",
  483. " <th>MB/s</th>\n",
  484. " <td>2.746347</td>\n",
  485. " <td>145.645420</td>\n",
  486. " </tr>\n",
  487. " <tr>\n",
  488. " <th>4</th>\n",
  489. " <th>MB/s</th>\n",
  490. " <td>3.498197</td>\n",
  491. " <td>229.083358</td>\n",
  492. " </tr>\n",
  493. " <tr>\n",
  494. " <th rowspan=\"3\" valign=\"top\">nearest neighbor 100ms tasks</th>\n",
  495. " <th>1</th>\n",
  496. " <th>MB/s</th>\n",
  497. " <td>1.367269</td>\n",
  498. " <td>146.296656</td>\n",
  499. " </tr>\n",
  500. " <tr>\n",
  501. " <th>2</th>\n",
  502. " <th>MB/s</th>\n",
  503. " <td>1.314216</td>\n",
  504. " <td>304.434504</td>\n",
  505. " </tr>\n",
  506. " <tr>\n",
  507. " <th>4</th>\n",
  508. " <th>MB/s</th>\n",
  509. " <td>1.342365</td>\n",
  510. " <td>596.067880</td>\n",
  511. " </tr>\n",
  512. " <tr>\n",
  513. " <th rowspan=\"3\" valign=\"top\">nearest neighbor fast tasks</th>\n",
  514. " <th>1</th>\n",
  515. " <th>MB/s</th>\n",
  516. " <td>0.224858</td>\n",
  517. " <td>911.479273</td>\n",
  518. " </tr>\n",
  519. " <tr>\n",
  520. " <th>2</th>\n",
  521. " <th>MB/s</th>\n",
  522. " <td>0.379917</td>\n",
  523. " <td>1117.691475</td>\n",
  524. " </tr>\n",
  525. " <tr>\n",
  526. " <th>4</th>\n",
  527. " <th>MB/s</th>\n",
  528. " <td>0.601148</td>\n",
  529. " <td>1420.598421</td>\n",
  530. " </tr>\n",
  531. " <tr>\n",
  532. " <th rowspan=\"3\" valign=\"top\">random access</th>\n",
  533. " <th>1</th>\n",
  534. " <th>bytes/s</th>\n",
  535. " <td>0.025998</td>\n",
  536. " <td>358.347875</td>\n",
  537. " </tr>\n",
  538. " <tr>\n",
  539. " <th>2</th>\n",
  540. " <th>bytes/s</th>\n",
  541. " <td>0.054119</td>\n",
  542. " <td>266.879176</td>\n",
  543. " </tr>\n",
  544. " <tr>\n",
  545. " <th>4</th>\n",
  546. " <th>bytes/s</th>\n",
  547. " <td>0.046264</td>\n",
  548. " <td>172.956708</td>\n",
  549. " </tr>\n",
  550. " <tr>\n",
  551. " <th rowspan=\"3\" valign=\"top\">rechunk large</th>\n",
  552. " <th>1</th>\n",
  553. " <th>MB/s</th>\n",
  554. " <td>0.195920</td>\n",
  555. " <td>1023.514836</td>\n",
  556. " </tr>\n",
  557. " <tr>\n",
  558. " <th>2</th>\n",
  559. " <th>MB/s</th>\n",
  560. " <td>0.532372</td>\n",
  561. " <td>751.343367</td>\n",
  562. " </tr>\n",
  563. " <tr>\n",
  564. " <th>4</th>\n",
  565. " <th>MB/s</th>\n",
  566. " <td>1.636902</td>\n",
  567. " <td>489.614913</td>\n",
  568. " </tr>\n",
  569. " <tr>\n",
  570. " <th rowspan=\"3\" valign=\"top\">rechunk small</th>\n",
  571. " <th>1</th>\n",
  572. " <th>MB/s</th>\n",
  573. " <td>0.172437</td>\n",
  574. " <td>1167.949136</td>\n",
  575. " </tr>\n",
  576. " <tr>\n",
  577. " <th>2</th>\n",
  578. " <th>MB/s</th>\n",
  579. " <td>0.241122</td>\n",
  580. " <td>1659.630424</td>\n",
  581. " </tr>\n",
  582. " <tr>\n",
  583. " <th>4</th>\n",
  584. " <th>MB/s</th>\n",
  585. " <td>0.965582</td>\n",
  586. " <td>829.053704</td>\n",
  587. " </tr>\n",
  588. " <tr>\n",
  589. " <th rowspan=\"3\" valign=\"top\">reduction</th>\n",
  590. " <th>1</th>\n",
  591. " <th>MB/s</th>\n",
  592. " <td>0.235358</td>\n",
  593. " <td>850.295775</td>\n",
  594. " </tr>\n",
  595. " <tr>\n",
  596. " <th>2</th>\n",
  597. " <th>MB/s</th>\n",
  598. " <td>0.358469</td>\n",
  599. " <td>1116.073630</td>\n",
  600. " </tr>\n",
  601. " <tr>\n",
  602. " <th>4</th>\n",
  603. " <th>MB/s</th>\n",
  604. " <td>0.505442</td>\n",
  605. " <td>1589.940599</td>\n",
  606. " </tr>\n",
  607. " <tr>\n",
  608. " <th rowspan=\"3\" valign=\"top\">reduction along axis</th>\n",
  609. " <th>1</th>\n",
  610. " <th>MB/s</th>\n",
  611. " <td>0.238496</td>\n",
  612. " <td>840.850606</td>\n",
  613. " </tr>\n",
  614. " <tr>\n",
  615. " <th>2</th>\n",
  616. " <th>MB/s</th>\n",
  617. " <td>0.343045</td>\n",
  618. " <td>1167.376920</td>\n",
  619. " </tr>\n",
  620. " <tr>\n",
  621. " <th>4</th>\n",
  622. " <th>MB/s</th>\n",
  623. " <td>0.495310</td>\n",
  624. " <td>1616.628542</td>\n",
  625. " </tr>\n",
  626. " <tr>\n",
  627. " <th>...</th>\n",
  628. " <th>...</th>\n",
  629. " <th>...</th>\n",
  630. " <th>...</th>\n",
  631. " <td>...</td>\n",
  632. " <td>...</td>\n",
  633. " </tr>\n",
  634. " <tr>\n",
  635. " <th rowspan=\"30\" valign=\"top\">tasks</th>\n",
  636. " <th rowspan=\"3\" valign=\"top\">dynamic tree reduction 100ms tasks</th>\n",
  637. " <th>1</th>\n",
  638. " <th>tasks/s</th>\n",
  639. " <td>4.049874</td>\n",
  640. " <td>24.692124</td>\n",
  641. " </tr>\n",
  642. " <tr>\n",
  643. " <th>2</th>\n",
  644. " <th>tasks/s</th>\n",
  645. " <td>4.272979</td>\n",
  646. " <td>46.805757</td>\n",
  647. " </tr>\n",
  648. " <tr>\n",
  649. " <th>4</th>\n",
  650. " <th>tasks/s</th>\n",
  651. " <td>3.752805</td>\n",
  652. " <td>106.844621</td>\n",
  653. " </tr>\n",
  654. " <tr>\n",
  655. " <th rowspan=\"3\" valign=\"top\">dynamic tree reduction fast tasks</th>\n",
  656. " <th>1</th>\n",
  657. " <th>tasks/s</th>\n",
  658. " <td>0.123307</td>\n",
  659. " <td>815.427446</td>\n",
  660. " </tr>\n",
  661. " <tr>\n",
  662. " <th>2</th>\n",
  663. " <th>tasks/s</th>\n",
  664. " <td>0.182649</td>\n",
  665. " <td>1105.414498</td>\n",
  666. " </tr>\n",
  667. " <tr>\n",
  668. " <th>4</th>\n",
  669. " <th>tasks/s</th>\n",
  670. " <td>0.456500</td>\n",
  671. " <td>902.061964</td>\n",
  672. " </tr>\n",
  673. " <tr>\n",
  674. " <th rowspan=\"3\" valign=\"top\">nearest neighbor 100ms tasks</th>\n",
  675. " <th>1</th>\n",
  676. " <th>tasks/s</th>\n",
  677. " <td>3.858868</td>\n",
  678. " <td>10.366202</td>\n",
  679. " </tr>\n",
  680. " <tr>\n",
  681. " <th>2</th>\n",
  682. " <th>tasks/s</th>\n",
  683. " <td>4.147557</td>\n",
  684. " <td>19.288811</td>\n",
  685. " </tr>\n",
  686. " <tr>\n",
  687. " <th>4</th>\n",
  688. " <th>tasks/s</th>\n",
  689. " <td>4.227893</td>\n",
  690. " <td>37.846582</td>\n",
  691. " </tr>\n",
  692. " <tr>\n",
  693. " <th rowspan=\"3\" valign=\"top\">nearest neighbor fast tasks</th>\n",
  694. " <th>1</th>\n",
  695. " <th>tasks/s</th>\n",
  696. " <td>0.173912</td>\n",
  697. " <td>1167.974119</td>\n",
  698. " </tr>\n",
  699. " <tr>\n",
  700. " <th>2</th>\n",
  701. " <th>tasks/s</th>\n",
  702. " <td>0.382527</td>\n",
  703. " <td>1057.424268</td>\n",
  704. " </tr>\n",
  705. " <tr>\n",
  706. " <th>4</th>\n",
  707. " <th>tasks/s</th>\n",
  708. " <td>0.537346</td>\n",
  709. " <td>1542.613544</td>\n",
  710. " </tr>\n",
  711. " <tr>\n",
  712. " <th rowspan=\"3\" valign=\"top\">sequential</th>\n",
  713. " <th>1</th>\n",
  714. " <th>tasks/s</th>\n",
  715. " <td>0.587582</td>\n",
  716. " <td>170.592242</td>\n",
  717. " </tr>\n",
  718. " <tr>\n",
  719. " <th>2</th>\n",
  720. " <th>tasks/s</th>\n",
  721. " <td>0.566866</td>\n",
  722. " <td>176.410216</td>\n",
  723. " </tr>\n",
  724. " <tr>\n",
  725. " <th>4</th>\n",
  726. " <th>tasks/s</th>\n",
  727. " <td>0.555918</td>\n",
  728. " <td>179.977319</td>\n",
  729. " </tr>\n",
  730. " <tr>\n",
  731. " <th rowspan=\"3\" valign=\"top\">task map 100ms tasks</th>\n",
  732. " <th>1</th>\n",
  733. " <th>tasks/s</th>\n",
  734. " <td>10.339996</td>\n",
  735. " <td>9.671213</td>\n",
  736. " </tr>\n",
  737. " <tr>\n",
  738. " <th>2</th>\n",
  739. " <th>tasks/s</th>\n",
  740. " <td>10.351813</td>\n",
  741. " <td>19.320287</td>\n",
  742. " </tr>\n",
  743. " <tr>\n",
  744. " <th>4</th>\n",
  745. " <th>tasks/s</th>\n",
  746. " <td>10.349894</td>\n",
  747. " <td>38.649526</td>\n",
  748. " </tr>\n",
  749. " <tr>\n",
  750. " <th rowspan=\"3\" valign=\"top\">task map 1s tasks</th>\n",
  751. " <th>1</th>\n",
  752. " <th>tasks/s</th>\n",
  753. " <td>4.051148</td>\n",
  754. " <td>0.987380</td>\n",
  755. " </tr>\n",
  756. " <tr>\n",
  757. " <th>2</th>\n",
  758. " <th>tasks/s</th>\n",
  759. " <td>4.063326</td>\n",
  760. " <td>1.968832</td>\n",
  761. " </tr>\n",
  762. " <tr>\n",
  763. " <th>4</th>\n",
  764. " <th>tasks/s</th>\n",
  765. " <td>4.064835</td>\n",
  766. " <td>3.936216</td>\n",
  767. " </tr>\n",
  768. " <tr>\n",
  769. " <th rowspan=\"3\" valign=\"top\">task map fast tasks</th>\n",
  770. " <th>1</th>\n",
  771. " <th>tasks/s</th>\n",
  772. " <td>0.166153</td>\n",
  773. " <td>1244.405187</td>\n",
  774. " </tr>\n",
  775. " <tr>\n",
  776. " <th>2</th>\n",
  777. " <th>tasks/s</th>\n",
  778. " <td>0.149536</td>\n",
  779. " <td>2675.049581</td>\n",
  780. " </tr>\n",
  781. " <tr>\n",
  782. " <th>4</th>\n",
  783. " <th>tasks/s</th>\n",
  784. " <td>0.428613</td>\n",
  785. " <td>1906.359809</td>\n",
  786. " </tr>\n",
  787. " <tr>\n",
  788. " <th rowspan=\"3\" valign=\"top\">tree reduction 100ms tasks</th>\n",
  789. " <th>1</th>\n",
  790. " <th>tasks/s</th>\n",
  791. " <td>6.585549</td>\n",
  792. " <td>19.436496</td>\n",
  793. " </tr>\n",
  794. " <tr>\n",
  795. " <th>2</th>\n",
  796. " <th>tasks/s</th>\n",
  797. " <td>7.040561</td>\n",
  798. " <td>36.360751</td>\n",
  799. " </tr>\n",
  800. " <tr>\n",
  801. " <th>4</th>\n",
  802. " <th>tasks/s</th>\n",
  803. " <td>7.320610</td>\n",
  804. " <td>69.946284</td>\n",
  805. " </tr>\n",
  806. " <tr>\n",
  807. " <th rowspan=\"3\" valign=\"top\">tree reduction fast tasks</th>\n",
  808. " <th>1</th>\n",
  809. " <th>tasks/s</th>\n",
  810. " <td>0.179473</td>\n",
  811. " <td>733.527981</td>\n",
  812. " </tr>\n",
  813. " <tr>\n",
  814. " <th>2</th>\n",
  815. " <th>tasks/s</th>\n",
  816. " <td>0.280910</td>\n",
  817. " <td>921.576918</td>\n",
  818. " </tr>\n",
  819. " <tr>\n",
  820. " <th>4</th>\n",
  821. " <th>tasks/s</th>\n",
  822. " <td>0.388071</td>\n",
  823. " <td>1326.426160</td>\n",
  824. " </tr>\n",
  825. " </tbody>\n",
  826. "</table>\n",
  827. "<p>93 rows × 2 columns</p>\n",
  828. "</div>"
  829. ],
  830. "text/plain": [
  831. " duration \\\n",
  832. "collection name n unit \n",
  833. "arrays blockwise 100ms tasks 1 MB/s 1.029480 \n",
  834. " 2 MB/s 0.970075 \n",
  835. " 4 MB/s 0.911542 \n",
  836. " create random 1 MB/s 0.405803 \n",
  837. " 2 MB/s 0.583153 \n",
  838. " 4 MB/s 0.785832 \n",
  839. " elementwise computation 1 MB/s 2.410327 \n",
  840. " 2 MB/s 2.746347 \n",
  841. " 4 MB/s 3.498197 \n",
  842. " nearest neighbor 100ms tasks 1 MB/s 1.367269 \n",
  843. " 2 MB/s 1.314216 \n",
  844. " 4 MB/s 1.342365 \n",
  845. " nearest neighbor fast tasks 1 MB/s 0.224858 \n",
  846. " 2 MB/s 0.379917 \n",
  847. " 4 MB/s 0.601148 \n",
  848. " random access 1 bytes/s 0.025998 \n",
  849. " 2 bytes/s 0.054119 \n",
  850. " 4 bytes/s 0.046264 \n",
  851. " rechunk large 1 MB/s 0.195920 \n",
  852. " 2 MB/s 0.532372 \n",
  853. " 4 MB/s 1.636902 \n",
  854. " rechunk small 1 MB/s 0.172437 \n",
  855. " 2 MB/s 0.241122 \n",
  856. " 4 MB/s 0.965582 \n",
  857. " reduction 1 MB/s 0.235358 \n",
  858. " 2 MB/s 0.358469 \n",
  859. " 4 MB/s 0.505442 \n",
  860. " reduction along axis 1 MB/s 0.238496 \n",
  861. " 2 MB/s 0.343045 \n",
  862. " 4 MB/s 0.495310 \n",
  863. "... ... \n",
  864. "tasks dynamic tree reduction 100ms tasks 1 tasks/s 4.049874 \n",
  865. " 2 tasks/s 4.272979 \n",
  866. " 4 tasks/s 3.752805 \n",
  867. " dynamic tree reduction fast tasks 1 tasks/s 0.123307 \n",
  868. " 2 tasks/s 0.182649 \n",
  869. " 4 tasks/s 0.456500 \n",
  870. " nearest neighbor 100ms tasks 1 tasks/s 3.858868 \n",
  871. " 2 tasks/s 4.147557 \n",
  872. " 4 tasks/s 4.227893 \n",
  873. " nearest neighbor fast tasks 1 tasks/s 0.173912 \n",
  874. " 2 tasks/s 0.382527 \n",
  875. " 4 tasks/s 0.537346 \n",
  876. " sequential 1 tasks/s 0.587582 \n",
  877. " 2 tasks/s 0.566866 \n",
  878. " 4 tasks/s 0.555918 \n",
  879. " task map 100ms tasks 1 tasks/s 10.339996 \n",
  880. " 2 tasks/s 10.351813 \n",
  881. " 4 tasks/s 10.349894 \n",
  882. " task map 1s tasks 1 tasks/s 4.051148 \n",
  883. " 2 tasks/s 4.063326 \n",
  884. " 4 tasks/s 4.064835 \n",
  885. " task map fast tasks 1 tasks/s 0.166153 \n",
  886. " 2 tasks/s 0.149536 \n",
  887. " 4 tasks/s 0.428613 \n",
  888. " tree reduction 100ms tasks 1 tasks/s 6.585549 \n",
  889. " 2 tasks/s 7.040561 \n",
  890. " 4 tasks/s 7.320610 \n",
  891. " tree reduction fast tasks 1 tasks/s 0.179473 \n",
  892. " 2 tasks/s 0.280910 \n",
  893. " 4 tasks/s 0.388071 \n",
  894. "\n",
  895. " rate \n",
  896. "collection name n unit \n",
  897. "arrays blockwise 100ms tasks 1 MB/s 194.274386 \n",
  898. " 2 MB/s 412.724335 \n",
  899. " 4 MB/s 879.661395 \n",
  900. " create random 1 MB/s 492.852099 \n",
  901. " 2 MB/s 701.543327 \n",
  902. " 4 MB/s 1044.580052 \n",
  903. " elementwise computation 1 MB/s 83.223446 \n",
  904. " 2 MB/s 145.645420 \n",
  905. " 4 MB/s 229.083358 \n",
  906. " nearest neighbor 100ms tasks 1 MB/s 146.296656 \n",
  907. " 2 MB/s 304.434504 \n",
  908. " 4 MB/s 596.067880 \n",
  909. " nearest neighbor fast tasks 1 MB/s 911.479273 \n",
  910. " 2 MB/s 1117.691475 \n",
  911. " 4 MB/s 1420.598421 \n",
  912. " random access 1 bytes/s 358.347875 \n",
  913. " 2 bytes/s 266.879176 \n",
  914. " 4 bytes/s 172.956708 \n",
  915. " rechunk large 1 MB/s 1023.514836 \n",
  916. " 2 MB/s 751.343367 \n",
  917. " 4 MB/s 489.614913 \n",
  918. " rechunk small 1 MB/s 1167.949136 \n",
  919. " 2 MB/s 1659.630424 \n",
  920. " 4 MB/s 829.053704 \n",
  921. " reduction 1 MB/s 850.295775 \n",
  922. " 2 MB/s 1116.073630 \n",
  923. " 4 MB/s 1589.940599 \n",
  924. " reduction along axis 1 MB/s 840.850606 \n",
  925. " 2 MB/s 1167.376920 \n",
  926. " 4 MB/s 1616.628542 \n",
  927. "... ... \n",
  928. "tasks dynamic tree reduction 100ms tasks 1 tasks/s 24.692124 \n",
  929. " 2 tasks/s 46.805757 \n",
  930. " 4 tasks/s 106.844621 \n",
  931. " dynamic tree reduction fast tasks 1 tasks/s 815.427446 \n",
  932. " 2 tasks/s 1105.414498 \n",
  933. " 4 tasks/s 902.061964 \n",
  934. " nearest neighbor 100ms tasks 1 tasks/s 10.366202 \n",
  935. " 2 tasks/s 19.288811 \n",
  936. " 4 tasks/s 37.846582 \n",
  937. " nearest neighbor fast tasks 1 tasks/s 1167.974119 \n",
  938. " 2 tasks/s 1057.424268 \n",
  939. " 4 tasks/s 1542.613544 \n",
  940. " sequential 1 tasks/s 170.592242 \n",
  941. " 2 tasks/s 176.410216 \n",
  942. " 4 tasks/s 179.977319 \n",
  943. " task map 100ms tasks 1 tasks/s 9.671213 \n",
  944. " 2 tasks/s 19.320287 \n",
  945. " 4 tasks/s 38.649526 \n",
  946. " task map 1s tasks 1 tasks/s 0.987380 \n",
  947. " 2 tasks/s 1.968832 \n",
  948. " 4 tasks/s 3.936216 \n",
  949. " task map fast tasks 1 tasks/s 1244.405187 \n",
  950. " 2 tasks/s 2675.049581 \n",
  951. " 4 tasks/s 1906.359809 \n",
  952. " tree reduction 100ms tasks 1 tasks/s 19.436496 \n",
  953. " 2 tasks/s 36.360751 \n",
  954. " 4 tasks/s 69.946284 \n",
  955. " tree reduction fast tasks 1 tasks/s 733.527981 \n",
  956. " 2 tasks/s 921.576918 \n",
  957. " 4 tasks/s 1326.426160 \n",
  958. "\n",
  959. "[93 rows x 2 columns]"
  960. ]
  961. },
  962. "execution_count": 15,
  963. "metadata": {},
  964. "output_type": "execute_result"
  965. }
  966. ],
  967. "source": [
  968. "df = ddf.groupby(['collection', 'name', 'n', 'unit']).mean()\n",
  969. "df"
  970. ]
  971. },
  972. {
  973. "cell_type": "code",
  974. "execution_count": 16,
  975. "metadata": {
  976. "collapsed": false
  977. },
  978. "outputs": [],
  979. "source": [
  980. "df.to_csv('scaling-data.csv')"
  981. ]
  982. },
  983. {
  984. "cell_type": "code",
  985. "execution_count": 5,
  986. "metadata": {
  987. "collapsed": false
  988. },
  989. "outputs": [
  990. {
  991. "ename": "FileNotFoundError",
  992. "evalue": "[Errno 2] No such file or directory: 'cloud'",
  993. "output_type": "error",
  994. "traceback": [
  995. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  996. "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
  997. "\u001b[0;32m<ipython-input-5-a83d970e64f2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgcsfs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mgcs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgcsfs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGCSFileSystem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtoken\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'cloud'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mgcs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mput\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'scaling-data.csv'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'dask-data/scaling-data-1.csv'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  998. "\u001b[0;32m/home/mrocklin/Software/anaconda/lib/python3.6/site-packages/gcsfs/core.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, project, access, token, block_size)\u001b[0m\n\u001b[1;32m 155\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maccess\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maccess\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdirs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 157\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 158\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_singleton\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  999. "\u001b[0;32m/home/mrocklin/Software/anaconda/lib/python3.6/site-packages/gcsfs/core.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self, refresh)\u001b[0m\n\u001b[1;32m 207\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtoken\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 208\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'type'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtoken\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtoken\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 209\u001b[0;31m \u001b[0mtoken\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parse_gtoken\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtoken\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 210\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtokens\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mproject\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccess\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtoken\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 211\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mproject\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maccess\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtokens\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  1000. "\u001b[0;32m/home/mrocklin/Software/anaconda/lib/python3.6/site-packages/gcsfs/core.py\u001b[0m in \u001b[0;36m_parse_gtoken\u001b[0;34m(gt)\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_parse_gtoken\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 173\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 174\u001b[0;31m \u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjson\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 175\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 176\u001b[0m \u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  1001. "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'cloud'"
  1002. ]
  1003. }
  1004. ],
  1005. "source": [
  1006. "import gcsfs\n",
  1007. "gcs = gcsfs.GCSFileSystem(token='cloud')\n",
  1008. "gcs.put('scaling-data.csv', 'dask-data/scaling-data-1.csv')"
  1009. ]
  1010. }
  1011. ],
  1012. "metadata": {
  1013. "kernelspec": {
  1014. "display_name": "Python 3",
  1015. "language": "python",
  1016. "name": "python3"
  1017. },
  1018. "language_info": {
  1019. "codemirror_mode": {
  1020. "name": "ipython",
  1021. "version": 3
  1022. },
  1023. "file_extension": ".py",
  1024. "mimetype": "text/x-python",
  1025. "name": "python",
  1026. "nbconvert_exporter": "python",
  1027. "pygments_lexer": "ipython3",
  1028. "version": "3.6.0"
  1029. }
  1030. },
  1031. "nbformat": 4,
  1032. "nbformat_minor": 2
  1033. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement