Skip to content
Snippets Groups Projects
lec2.ipynb 146 KiB
Newer Older
TYLER CARAZA-HARTER's avatar
TYLER CARAZA-HARTER committed
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c8dca847-54af-4284-97d8-0682e88a6e8d",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Setting default log level to \"WARN\".\n",
      "To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n",
      "25/03/12 16:10:35 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n"
     ]
    }
   ],
   "source": [
    "from pyspark.sql import SparkSession\n",
    "spark = (SparkSession.builder.appName(\"cs544\")\n",
    "         .master(\"spark://boss:7077\")\n",
    "         .config(\"spark.executor.memory\", \"2G\")\n",
    "         .config(\"spark.sql.warehouse.dir\", \"hdfs://nn:9000/user/hive/warehouse\")\n",
    "         .enableHiveSupport()\n",
    "         .getOrCreate())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2294e4e0-ab19-496c-980f-31df757e7837",
   "metadata": {},
   "outputs": [],
   "source": [
    "!hdfs dfs -cp sf.csv hdfs://nn:9000/sf.csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cb54bacc-b52a-4c25-93d2-2ba0f61de9b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "                                                                                \r"
     ]
    }
   ],
   "source": [
    "df = (spark.read.format(\"csv\")\n",
    "      .option(\"header\", True)\n",
    "      .option(\"inferSchema\", True)\n",
    "      .load(\"hdfs://nn:9000/sf.csv\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c1298818-83f6-444b-b8a0-4be5b16fd6fb",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "23/10/27 01:43:57 WARN SparkStringUtils: Truncated the string representation of a plan since it was too large. This behavior can be adjusted by setting 'spark.sql.debug.maxToStringFields'.\n",
      "                                                                                \r"
     ]
    }
   ],
   "source": [
    "from pyspark.sql.functions import col, expr\n",
    "cols = [col(c).alias(c.replace(\" \", \"_\")) for c in df.columns]\n",
    "df.select(cols).write.format(\"parquet\").save(\"hdfs://nn:9000/sf.parquet\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "37d1ded3-ed8a-4e39-94cb-dd3a3272af91",
   "metadata": {},
   "outputs": [],
   "source": [
    "!hdfs dfs -rm hdfs://nn:9000/sf.csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "abea48b5-e012-4ae2-a53a-e40350f94e20",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "                                                                                "
     ]
    }
   ],
   "source": [
    "df = spark.read.format(\"parquet\").load(\"hdfs://nn:9000/sf.parquet\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "bff0f592-1ba2-4812-b09d-16a3b169d41a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DataFrame[Call_Number: int, Unit_ID: string, Incident_Number: int, Call_Type: string, Call_Date: string, Watch_Date: string, Received_DtTm: string, Entry_DtTm: string, Dispatch_DtTm: string, Response_DtTm: string, On_Scene_DtTm: string, Transport_DtTm: string, Hospital_DtTm: string, Call_Final_Disposition: string, Available_DtTm: string, Address: string, City: string, Zipcode_of_Incident: int, Battalion: string, Station_Area: string, Box: string, Original_Priority: string, Priority: string, Final_Priority: int, ALS_Unit: boolean, Call_Type_Group: string, Number_of_Alarms: int, Unit_Type: string, Unit_sequence_in_call_dispatch: int, Fire_Prevention_District: string, Supervisor_District: string, Neighborhooods_-_Analysis_Boundaries: string, RowID: string, case_location: string, Analysis_Neighborhoods: int]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "7f6d52b9-f3a9-4448-bcd3-86fd3aac4611",
   "metadata": {},
   "outputs": [],
   "source": [
    "df2 = df.withColumnRenamed(\"Neighborhooods_-_Analysis_Boundaries\", \"area\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "be5964cf-a72c-4f4c-9aff-f85f8e90c5c6",
   "metadata": {},
   "outputs": [],
   "source": [
    "df2.createOrReplaceTempView(\"calls\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "49606e81-7d7a-405d-b38e-6e798c4cf2a6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Call_Number</th>\n",
       "      <th>Unit_ID</th>\n",
       "      <th>Incident_Number</th>\n",
       "      <th>Call_Type</th>\n",
       "      <th>Call_Date</th>\n",
       "      <th>Watch_Date</th>\n",
       "      <th>Received_DtTm</th>\n",
       "      <th>Entry_DtTm</th>\n",
       "      <th>Dispatch_DtTm</th>\n",
       "      <th>Response_DtTm</th>\n",
       "      <th>...</th>\n",
       "      <th>Call_Type_Group</th>\n",
       "      <th>Number_of_Alarms</th>\n",
       "      <th>Unit_Type</th>\n",
       "      <th>Unit_sequence_in_call_dispatch</th>\n",
       "      <th>Fire_Prevention_District</th>\n",
       "      <th>Supervisor_District</th>\n",
       "      <th>Neighborhooods_-_Analysis_Boundaries</th>\n",
       "      <th>RowID</th>\n",
       "      <th>case_location</th>\n",
       "      <th>Analysis_Neighborhoods</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
TYLER CARAZA-HARTER's avatar
TYLER CARAZA-HARTER committed
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>201340825</td>\n",
       "      <td>T06</td>\n",
       "      <td>20055834</td>\n",
       "      <td>Other</td>\n",
       "      <td>05/13/2020</td>\n",
       "      <td>05/13/2020</td>\n",
       "      <td>05/13/2020 08:51:30 AM</td>\n",
       "      <td>05/13/2020 08:51:30 AM</td>\n",
       "      <td>05/13/2020 08:54:56 AM</td>\n",
       "      <td>05/13/2020 08:55:10 AM</td>\n",
       "      <td>...</td>\n",
       "      <td>Alarm</td>\n",
       "      <td>1</td>\n",
       "      <td>TRUCK</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>Mission</td>\n",
       "      <td>201340825-T06</td>\n",
       "      <td>POINT (-122.42251458613262 37.770727334245194)</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>201241707</td>\n",
       "      <td>FB3</td>\n",
       "      <td>20052084</td>\n",
       "      <td>Outside Fire</td>\n",
       "      <td>05/03/2020</td>\n",
       "      <td>05/03/2020</td>\n",
       "      <td>05/03/2020 01:46:02 PM</td>\n",
       "      <td>05/03/2020 01:46:02 PM</td>\n",
       "      <td>05/03/2020 01:46:11 PM</td>\n",
       "      <td>05/03/2020 01:47:41 PM</td>\n",
       "      <td>...</td>\n",
       "      <td>Alarm</td>\n",
       "      <td>1</td>\n",
       "      <td>SUPPORT</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Financial District/South Beach</td>\n",
       "      <td>201241707-FB3</td>\n",
       "      <td>POINT (-122.3946511276673 37.79530574375478)</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>201083222</td>\n",
       "      <td>AM118</td>\n",
       "      <td>20045948</td>\n",
       "      <td>Medical Incident</td>\n",
       "      <td>04/17/2020</td>\n",
       "      <td>04/17/2020</td>\n",
       "      <td>04/17/2020 09:19:43 PM</td>\n",
       "      <td>04/17/2020 09:19:43 PM</td>\n",
       "      <td>04/17/2020 09:21:10 PM</td>\n",
       "      <td>04/17/2020 09:21:55 PM</td>\n",
       "      <td>...</td>\n",
       "      <td>Non Life-threatening</td>\n",
       "      <td>1</td>\n",
       "      <td>PRIVATE</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>South of Market</td>\n",
       "      <td>201083222-AM118</td>\n",
       "      <td>POINT (-122.41071806030364 37.778959763358266)</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Call_Number Unit_ID  Incident_Number         Call_Type   Call_Date  \\\n",
       "0    201340825     T06         20055834             Other  05/13/2020   \n",
       "1    201241707     FB3         20052084      Outside Fire  05/03/2020   \n",
       "2    201083222   AM118         20045948  Medical Incident  04/17/2020   \n",
       "\n",
       "   Watch_Date           Received_DtTm              Entry_DtTm  \\\n",
       "0  05/13/2020  05/13/2020 08:51:30 AM  05/13/2020 08:51:30 AM   \n",
       "1  05/03/2020  05/03/2020 01:46:02 PM  05/03/2020 01:46:02 PM   \n",
       "2  04/17/2020  04/17/2020 09:19:43 PM  04/17/2020 09:19:43 PM   \n",
       "\n",
       "            Dispatch_DtTm           Response_DtTm  ...       Call_Type_Group  \\\n",
       "0  05/13/2020 08:54:56 AM  05/13/2020 08:55:10 AM  ...                 Alarm   \n",
       "1  05/03/2020 01:46:11 PM  05/03/2020 01:47:41 PM  ...                 Alarm   \n",
       "2  04/17/2020 09:21:10 PM  04/17/2020 09:21:55 PM  ...  Non Life-threatening   \n",
       "\n",
       "  Number_of_Alarms Unit_Type Unit_sequence_in_call_dispatch  \\\n",
       "0                1     TRUCK                              1   \n",
       "1                1   SUPPORT                              2   \n",
       "2                1   PRIVATE                              2   \n",
       "\n",
       "  Fire_Prevention_District Supervisor_District  \\\n",
       "0                        2                   8   \n",
       "1                        1                   3   \n",
       "2                        2                   6   \n",
       "\n",
       "  Neighborhooods_-_Analysis_Boundaries            RowID  \\\n",
       "0                              Mission    201340825-T06   \n",
       "1       Financial District/South Beach    201241707-FB3   \n",
       "2                      South of Market  201083222-AM118   \n",
       "\n",
       "                                    case_location Analysis_Neighborhoods  \n",
       "0  POINT (-122.42251458613262 37.770727334245194)                     20  \n",
       "1    POINT (-122.3946511276673 37.79530574375478)                      8  \n",
       "2  POINT (-122.41071806030364 37.778959763358266)                     34  \n",
       "\n",
       "[3 rows x 35 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spark.sql(\"SELECT * FROM calls LIMIT 3\").toPandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "74f21fff-58d6-4d97-8500-b5d541022e68",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spark.sql(\"\"\"\n",
    "SELECT *\n",
    "FROM calls\n",
    "WHERE Call_Type LIKE 'Odor%'\n",
    "\"\"\").rdd.getNumPartitions()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "138be505-d3ed-4cb4-bd3c-820c258e73db",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "25/03/12 16:15:35 WARN HadoopFSUtils: The directory hdfs://nn:9000/user/hive/warehouse/stinky was not found. Was it deleted very recently?\n",
      "25/03/12 16:15:35 WARN FileUtils: File does not exist: hdfs://nn:9000/user/hive/warehouse/stinky; Force to delete it.\n",
      "25/03/12 16:15:35 ERROR FileUtils: Failed to delete hdfs://nn:9000/user/hive/warehouse/stinky\n",
      "25/03/12 16:15:40 WARN SessionState: METASTORE_FILTER_HOOK will be ignored, since hive.security.authorization.manager is set to instance of HiveAuthorizerFactory.\n",
      "25/03/12 16:15:41 WARN HiveConf: HiveConf of name hive.internal.ss.authz.settings.applied.marker does not exist\n",
      "25/03/12 16:15:41 WARN HiveConf: HiveConf of name hive.stats.jdbc.timeout does not exist\n",
      "25/03/12 16:15:41 WARN HiveConf: HiveConf of name hive.stats.retries.wait does not exist\n"
     ]
    }
   ],
   "source": [
    "spark.sql(\"\"\"\n",
    "SELECT *\n",
    "FROM calls\n",
    "WHERE Call_Type LIKE 'Odor%'\n",
    "\"\"\").write.mode(\"overwrite\").saveAsTable(\"stinky\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "78808bf1-f3c5-4882-af59-f36490f87968",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+---------+---------+-----------+\n",
      "|namespace|tableName|isTemporary|\n",
      "+---------+---------+-----------+\n",
      "|  default|   stinky|      false|\n",
      "|         |    calls|       true|\n",
      "+---------+---------+-----------+\n",
      "\n"
     ]
    }
   ],
   "source": [
    "spark.sql(\"SHOW TABLES\").show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "1fc891d4-e1c0-4b61-aa56-0b7d2aab8459",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 1 items\n",
      "drwxr-xr-x   - root supergroup          0 2025-03-12 16:15 hdfs://nn:9000/user/hive/warehouse/stinky\n"
     ]
    }
   ],
   "source": [
    "!hdfs dfs -ls hdfs://nn:9000/user/hive/warehouse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "604df69f-bde6-46c1-b15f-0a296fd50c1e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 7 items\n",
      "-rw-r--r--   3 root supergroup          0 2025-03-12 16:15 hdfs://nn:9000/user/hive/warehouse/stinky/_SUCCESS\n",
      "-rw-r--r--   3 root supergroup     334207 2025-03-12 16:15 hdfs://nn:9000/user/hive/warehouse/stinky/part-00000-58b4c030-4d20-4bf2-8bf3-a074ab48c3c0-c000.snappy.parquet\n",
      "-rw-r--r--   3 root supergroup     370434 2025-03-12 16:15 hdfs://nn:9000/user/hive/warehouse/stinky/part-00001-58b4c030-4d20-4bf2-8bf3-a074ab48c3c0-c000.snappy.parquet\n",
      "-rw-r--r--   3 root supergroup     173440 2025-03-12 16:15 hdfs://nn:9000/user/hive/warehouse/stinky/part-00002-58b4c030-4d20-4bf2-8bf3-a074ab48c3c0-c000.snappy.parquet\n",
      "-rw-r--r--   3 root supergroup     209223 2025-03-12 16:15 hdfs://nn:9000/user/hive/warehouse/stinky/part-00003-58b4c030-4d20-4bf2-8bf3-a074ab48c3c0-c000.snappy.parquet\n",
      "-rw-r--r--   3 root supergroup     138713 2025-03-12 16:15 hdfs://nn:9000/user/hive/warehouse/stinky/part-00004-58b4c030-4d20-4bf2-8bf3-a074ab48c3c0-c000.snappy.parquet\n",
      "-rw-r--r--   3 root supergroup      70117 2025-03-12 16:15 hdfs://nn:9000/user/hive/warehouse/stinky/part-00005-58b4c030-4d20-4bf2-8bf3-a074ab48c3c0-c000.snappy.parquet\n"
     ]
    }
   ],
   "source": [
    "!hdfs dfs -ls hdfs://nn:9000/user/hive/warehouse/stinky"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "2170d410-3db8-4949-af69-2c412756ba79",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Call_Number</th>\n",
       "      <th>Unit_ID</th>\n",
       "      <th>Incident_Number</th>\n",
       "      <th>Call_Type</th>\n",
       "      <th>Call_Date</th>\n",
       "      <th>Watch_Date</th>\n",
       "      <th>Received_DtTm</th>\n",
       "      <th>Entry_DtTm</th>\n",
       "      <th>Dispatch_DtTm</th>\n",
       "      <th>Response_DtTm</th>\n",
       "      <th>...</th>\n",
       "      <th>Call_Type_Group</th>\n",
       "      <th>Number_of_Alarms</th>\n",
       "      <th>Unit_Type</th>\n",
       "      <th>Unit_sequence_in_call_dispatch</th>\n",
       "      <th>Fire_Prevention_District</th>\n",
       "      <th>Supervisor_District</th>\n",
       "      <th>Neighborhooods_-_Analysis_Boundaries</th>\n",
       "      <th>RowID</th>\n",
       "      <th>case_location</th>\n",
       "      <th>Analysis_Neighborhoods</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>31380322</td>\n",
       "      <td>E19</td>\n",
       "      <td>3039579</td>\n",
       "      <td>Odor (Strange / Unknown)</td>\n",
       "      <td>05/18/2003</td>\n",
       "      <td>05/18/2003</td>\n",
       "      <td>05/18/2003 06:06:07 PM</td>\n",
       "      <td>05/18/2003 06:07:29 PM</td>\n",
       "      <td>05/18/2003 06:08:15 PM</td>\n",
       "      <td>None</td>\n",
       "      <td>...</td>\n",
       "      <td>None</td>\n",
       "      <td>1</td>\n",
       "      <td>ENGINE</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "      <td>7</td>\n",
       "      <td>Lakeshore</td>\n",
       "      <td>031380322-E19</td>\n",
       "      <td>POINT (-122.484903847655 37.720566578193)</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>30630341</td>\n",
       "      <td>B04</td>\n",
       "      <td>3018168</td>\n",
       "      <td>Odor (Strange / Unknown)</td>\n",
       "      <td>03/04/2003</td>\n",
       "      <td>03/04/2003</td>\n",
       "      <td>03/04/2003 03:15:45 PM</td>\n",
       "      <td>03/04/2003 03:18:48 PM</td>\n",
       "      <td>03/04/2003 03:19:27 PM</td>\n",
       "      <td>03/04/2003 03:19:38 PM</td>\n",
       "      <td>...</td>\n",
       "      <td>None</td>\n",
       "      <td>1</td>\n",
       "      <td>CHIEF</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>Nob Hill</td>\n",
       "      <td>030630341-B04</td>\n",
       "      <td>POINT (-122.418012422783 37.789883351367)</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>30520027</td>\n",
       "      <td>B03</td>\n",
       "      <td>3014868</td>\n",
       "      <td>Odor (Strange / Unknown)</td>\n",
       "      <td>02/21/2003</td>\n",
       "      <td>02/20/2003</td>\n",
       "      <td>02/21/2003 02:16:47 AM</td>\n",
       "      <td>02/21/2003 02:17:59 AM</td>\n",
       "      <td>02/21/2003 02:18:41 AM</td>\n",
       "      <td>02/21/2003 02:19:56 AM</td>\n",
       "      <td>...</td>\n",
       "      <td>None</td>\n",
       "      <td>1</td>\n",
       "      <td>CHIEF</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>Tenderloin</td>\n",
       "      <td>030520027-B03</td>\n",
       "      <td>POINT (-122.415737767164 37.780721312022)</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Call_Number Unit_ID  Incident_Number                 Call_Type   Call_Date  \\\n",
       "0     31380322     E19          3039579  Odor (Strange / Unknown)  05/18/2003   \n",
       "1     30630341     B04          3018168  Odor (Strange / Unknown)  03/04/2003   \n",
       "2     30520027     B03          3014868  Odor (Strange / Unknown)  02/21/2003   \n",
       "\n",
       "   Watch_Date           Received_DtTm              Entry_DtTm  \\\n",
       "0  05/18/2003  05/18/2003 06:06:07 PM  05/18/2003 06:07:29 PM   \n",
       "1  03/04/2003  03/04/2003 03:15:45 PM  03/04/2003 03:18:48 PM   \n",
       "2  02/20/2003  02/21/2003 02:16:47 AM  02/21/2003 02:17:59 AM   \n",
       "\n",
       "            Dispatch_DtTm           Response_DtTm  ... Call_Type_Group  \\\n",
       "0  05/18/2003 06:08:15 PM                    None  ...            None   \n",
       "1  03/04/2003 03:19:27 PM  03/04/2003 03:19:38 PM  ...            None   \n",
       "2  02/21/2003 02:18:41 AM  02/21/2003 02:19:56 AM  ...            None   \n",
       "\n",
       "  Number_of_Alarms Unit_Type Unit_sequence_in_call_dispatch  \\\n",
       "0                1    ENGINE                              1   \n",
       "1                1     CHIEF                              2   \n",
       "2                1     CHIEF                              3   \n",
       "\n",
       "  Fire_Prevention_District Supervisor_District  \\\n",
       "0                        8                   7   \n",
       "1                        4                   3   \n",
       "2                        2                   6   \n",
       "\n",
       "  Neighborhooods_-_Analysis_Boundaries          RowID  \\\n",
       "0                            Lakeshore  031380322-E19   \n",
       "1                             Nob Hill  030630341-B04   \n",
       "2                           Tenderloin  030520027-B03   \n",
       "\n",
       "                               case_location Analysis_Neighborhoods  \n",
       "0  POINT (-122.484903847655 37.720566578193)                     16  \n",
       "1  POINT (-122.418012422783 37.789883351367)                     21  \n",
       "2  POINT (-122.415737767164 37.780721312022)                     36  \n",
       "\n",
       "[3 rows x 35 columns]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spark.sql(\"SELECT * FROM stinky LIMIT 3\").toPandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "110ae6bb-b563-4416-a950-274ebca75c4b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DataFrame[Call_Number: int, Unit_ID: string, Incident_Number: int, Call_Type: string, Call_Date: string, Watch_Date: string, Received_DtTm: string, Entry_DtTm: string, Dispatch_DtTm: string, Response_DtTm: string, On_Scene_DtTm: string, Transport_DtTm: string, Hospital_DtTm: string, Call_Final_Disposition: string, Available_DtTm: string, Address: string, City: string, Zipcode_of_Incident: int, Battalion: string, Station_Area: string, Box: string, Original_Priority: string, Priority: string, Final_Priority: int, ALS_Unit: boolean, Call_Type_Group: string, Number_of_Alarms: int, Unit_Type: string, Unit_sequence_in_call_dispatch: int, Fire_Prevention_District: string, Supervisor_District: string, Neighborhooods_-_Analysis_Boundaries: string, RowID: string, case_location: string, Analysis_Neighborhoods: int]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spark.table(\"calls\") # view"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "7cdcb019-0c26-447e-b5dc-861db633d9b9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DataFrame[Call_Number: int, Unit_ID: string, Incident_Number: int, Call_Type: string, Call_Date: string, Watch_Date: string, Received_DtTm: string, Entry_DtTm: string, Dispatch_DtTm: string, Response_DtTm: string, On_Scene_DtTm: string, Transport_DtTm: string, Hospital_DtTm: string, Call_Final_Disposition: string, Available_DtTm: string, Address: string, City: string, Zipcode_of_Incident: int, Battalion: string, Station_Area: string, Box: string, Original_Priority: string, Priority: string, Final_Priority: int, ALS_Unit: boolean, Call_Type_Group: string, Number_of_Alarms: int, Unit_Type: string, Unit_sequence_in_call_dispatch: int, Fire_Prevention_District: string, Supervisor_District: string, Neighborhooods_-_Analysis_Boundaries: string, RowID: string, case_location: string, Analysis_Neighborhoods: int]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spark.table(\"stinky\") # table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "e6227979-0f1a-404f-8664-f79a31dd5f72",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spark.table(\"stinky\").rdd.getNumPartitions()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba9c73f9-000a-4ef4-ad6b-8cde45ec7292",
   "metadata": {},
   "source": [
    "# Queries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "cb6f8128-c8a5-436f-b4d0-465340c8c442",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "                                                                                "
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>area</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Inner Sunset</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Haight Ashbury</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Lincoln Park</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Japantown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>North Beach</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Lone Mountain/USF</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Western Addition</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Bernal Heights</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Mission Bay</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Hayes Valley</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Financial District/South Beach</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Lakeshore</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>Bayview Hunters Point</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>Visitacion Valley</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Inner Richmond</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Nob Hill</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Oceanview/Merced/Ingleside</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Outer Richmond</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Treasure Island</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>Chinatown</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>Mission</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>Excelsior</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>Twin Peaks</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>Seacliff</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>Sunset/Parkside</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>Presidio Heights</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>Portola</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>Golden Gate Park</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>Glen Park</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>McLaren Park</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>Presidio</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>Tenderloin</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>Potrero Hill</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Outer Mission</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>Castro/Upper Market</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>Marina</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>Noe Valley</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>Russian Hill</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>South of Market</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>Pacific Heights</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>West of Twin Peaks</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              area\n",
       "0                     Inner Sunset\n",
       "1                   Haight Ashbury\n",
       "2                     Lincoln Park\n",
       "3                        Japantown\n",
       "4                             None\n",
       "5                      North Beach\n",
       "6                Lone Mountain/USF\n",
       "7                 Western Addition\n",
       "8                   Bernal Heights\n",
       "9                      Mission Bay\n",
       "10                    Hayes Valley\n",
       "11  Financial District/South Beach\n",
       "12                       Lakeshore\n",
       "13           Bayview Hunters Point\n",
       "14               Visitacion Valley\n",
       "15                  Inner Richmond\n",
       "16                        Nob Hill\n",
       "17      Oceanview/Merced/Ingleside\n",
       "18                  Outer Richmond\n",
       "19                 Treasure Island\n",
       "20                       Chinatown\n",
       "21                         Mission\n",
       "22                       Excelsior\n",
       "23                      Twin Peaks\n",
       "24                        Seacliff\n",
       "25                 Sunset/Parkside\n",
       "26                Presidio Heights\n",
       "27                         Portola\n",
       "28                Golden Gate Park\n",
       "29                       Glen Park\n",
       "30                    McLaren Park\n",
       "31                        Presidio\n",
       "32                      Tenderloin\n",
       "33                    Potrero Hill\n",
       "34                   Outer Mission\n",
       "35             Castro/Upper Market\n",
       "36                          Marina\n",
       "37                      Noe Valley\n",
       "38                    Russian Hill\n",
       "39                 South of Market\n",
       "40                 Pacific Heights\n",
       "41              West of Twin Peaks"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# what are the names of the areas?\n",
    "spark.sql(\"\"\"\n",
    "SELECT DISTINCT area\n",
    "FROM calls\n",
    "LIMIT 50\n",
    "\"\"\").toPandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "4fd672cd-6213-4a7e-9132-a1812a1b5d85",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>area</th>\n",
       "      <th>count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Tenderloin</td>\n",
       "      <td>809041</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>South of Market</td>\n",
       "      <td>583631</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Mission</td>\n",
       "      <td>543289</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Financial District/South Beach</td>\n",
       "      <td>402331</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Bayview Hunters Point</td>\n",
       "      <td>326423</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             area   count\n",
       "0                      Tenderloin  809041\n",
       "1                 South of Market  583631\n",
       "2                         Mission  543289\n",
       "3  Financial District/South Beach  402331\n",
       "4           Bayview Hunters Point  326423"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# how many fire dept calls are there per area?\n",
    "pandas_df = spark.sql(\"\"\"\n",
    "SELECT area, COUNT(*) AS count\n",
    "FROM calls\n",
    "GROUP BY area\n",
    "ORDER BY count DESC\n",
    "\"\"\").toPandas()\n",
    "pandas_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "7265fa53-13a7-42b2-83f4-3138a8bd4207",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Call Count (thousands)')"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 600x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = (pandas_df.set_index(\"area\") / 1000).plot.bar(figsize=(6,3))\n",
    "ax.set_ylabel(\"Call Count (thousands)\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "a6e6327f-1a9b-4582-857f-3dd9c92d7d8a",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "                                                                                "
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Call_Type_Group</th>\n",
       "      <th>Call_Type</th>\n",
       "      <th>typecount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>None</td>\n",
       "      <td>Medical Incident</td>\n",
       "      <td>1783402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Potentially Life-Threatening</td>\n",
       "      <td>Medical Incident</td>\n",
       "      <td>1448636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Non Life-threatening</td>\n",
       "      <td>Medical Incident</td>\n",
       "      <td>716653</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>None</td>\n",
       "      <td>Structure Fire</td>\n",
       "      <td>416250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Alarm</td>\n",
       "      <td>Alarms</td>\n",
       "      <td>366116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>Alarm</td>\n",
       "      <td>Vehicle Fire</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>Fire</td>\n",
       "      <td>Train / Rail Fire</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75</th>\n",
       "      <td>None</td>\n",
       "      <td>Lightning Strike (Investigation)</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>Alarm</td>\n",
       "      <td>Oil Spill</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>Fire</td>\n",
       "      <td>Administrative</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>78 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                 Call_Type_Group                         Call_Type  typecount\n",
       "0                           None                  Medical Incident    1783402\n",
       "1   Potentially Life-Threatening                  Medical Incident    1448636\n",
       "2           Non Life-threatening                  Medical Incident     716653\n",
       "3                           None                    Structure Fire     416250\n",
       "4                          Alarm                            Alarms     366116\n",
       "..                           ...                               ...        ...\n",
       "73                         Alarm                      Vehicle Fire         13\n",
       "74                          Fire                 Train / Rail Fire         10\n",
       "75                          None  Lightning Strike (Investigation)          9\n",
       "76                         Alarm                         Oil Spill          5\n",
       "77                          Fire                    Administrative          1\n",
       "\n",
       "[78 rows x 3 columns]"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# for each combo of group/type, how many calls are there?\n",
    "spark.sql(\"\"\"\n",
    "SELECT Call_Type_Group, Call_Type, COUNT(*) AS typecount\n",
    "FROM calls\n",
    "GROUP BY Call_Type_Group, Call_Type\n",
    "ORDER BY typecount DESC\n",
    "\"\"\").toPandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "79849f55-878f-41e0-8fc9-af2a8fcfc6fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Call_Type_Group</th>\n",
       "      <th>percent</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Alarm</td>\n",
       "      <td>48.662342</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>None</td>\n",
       "      <td>63.295298</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Potentially Life-Threatening</td>\n",
       "      <td>94.230156</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Non Life-threatening</td>\n",
       "      <td>92.417455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Fire</td>\n",
       "      <td>38.300729</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                Call_Type_Group    percent\n",
       "0                         Alarm  48.662342\n",
       "1                          None  63.295298\n",
       "2  Potentially Life-Threatening  94.230156\n",
       "3          Non Life-threatening  92.417455\n",
       "4                          Fire  38.300729"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# for each group, what percent of calls are in the biggest type?\n",
    "spark.sql(\"\"\"\n",
    "SELECT Call_Type_Group, MAX(typecount) / SUM(typecount) * 100 AS percent\n",
    "FROM (\n",
    "    SELECT Call_Type_Group, Call_Type, COUNT(*) AS typecount\n",
    "    FROM calls\n",
    "    GROUP BY Call_Type_Group, Call_Type\n",
    ")\n",
    "GROUP BY Call_Type_Group\n",
    "\"\"\").toPandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "607846d3-476e-41e9-9e38-d5346936ce04",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyspark.sql.functions import expr, col"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "c2c83a3a-5601-46f2-828a-d41641351776",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Call_Type_Group</th>\n",
       "      <th>((MAX(count) / SUM(count)) * 100)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Alarm</td>\n",
       "      <td>48.662342</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>None</td>\n",
       "      <td>63.295298</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Potentially Life-Threatening</td>\n",
       "      <td>94.230156</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Non Life-threatening</td>\n",
       "      <td>92.417455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Fire</td>\n",
       "      <td>38.300729</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                Call_Type_Group  ((MAX(count) / SUM(count)) * 100)\n",
       "0                         Alarm                          48.662342\n",
       "1                          None                          63.295298\n",
       "2  Potentially Life-Threatening                          94.230156\n",
       "3          Non Life-threatening                          92.417455\n",
       "4                          Fire                          38.300729"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(\n",
    "    spark.table(\"calls\")\n",
    "    .groupby(\"Call_Type_Group\", \"Call_Type\")\n",
    "    .count()\n",
    "    .groupby(\"Call_Type_Group\")\n",
    "    .agg(expr(\"MAX(count) / SUM(count) * 100\"))\n",
    "    .toPandas()\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "f0cc18c4-f9ed-449c-acdb-799d7e4d5914",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "                                                                                "
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>area</th>\n",
       "      <th>Call_Number</th>\n",
       "      <th>num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Bayview Hunters Point</td>\n",
       "      <td>1030119</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Bayview Hunters Point</td>\n",
       "      <td>1040031</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Bayview Hunters Point</td>\n",
       "      <td>1040078</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Bernal Heights</td>\n",
       "      <td>1040089</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Bernal Heights</td>\n",
       "      <td>1040245</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>121</th>\n",
       "      <td>West of Twin Peaks</td>\n",
       "      <td>1040020</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>122</th>\n",
       "      <td>West of Twin Peaks</td>\n",
       "      <td>1040115</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>123</th>\n",
       "      <td>Western Addition</td>\n",
       "      <td>1030128</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>Western Addition</td>\n",
       "      <td>1030128</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>Western Addition</td>\n",
       "      <td>1030128</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>126 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                      area  Call_Number  num\n",
       "0    Bayview Hunters Point      1030119    1\n",
       "1    Bayview Hunters Point      1040031    2\n",
       "2    Bayview Hunters Point      1040078    3\n",
       "3           Bernal Heights      1040089    1\n",
       "4           Bernal Heights      1040245    2\n",
       "..                     ...          ...  ...\n",
       "121     West of Twin Peaks      1040020    2\n",
       "122     West of Twin Peaks      1040115    3\n",
       "123       Western Addition      1030128    1\n",
       "124       Western Addition      1030128    2\n",
       "125       Western Addition      1030128    3\n",
       "\n",
       "[126 rows x 3 columns]"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# what are the 3 smallest call numbers per area\n",
    "spark.sql(\"\"\"\n",
    "SELECT area, Call_Number, row_number() OVER (PARTITION BY area ORDER BY Call_Number ASC) AS num\n",
    "FROM calls\n",
    "\"\"\").where(\"num <= 3\").toPandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "f4963482-d348-411e-820c-0593555cb0cc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Call_Number</th>\n",
       "      <th>Unit_ID</th>\n",
       "      <th>Incident_Number</th>\n",
       "      <th>Call_Type</th>\n",
       "      <th>Call_Date</th>\n",
       "      <th>Watch_Date</th>\n",
       "      <th>Received_DtTm</th>\n",
       "      <th>Entry_DtTm</th>\n",
       "      <th>Dispatch_DtTm</th>\n",
       "      <th>Response_DtTm</th>\n",
       "      <th>...</th>\n",
       "      <th>Call_Type_Group</th>\n",
       "      <th>Number_of_Alarms</th>\n",
       "      <th>Unit_Type</th>\n",
       "      <th>Unit_sequence_in_call_dispatch</th>\n",
       "      <th>Fire_Prevention_District</th>\n",
       "      <th>Supervisor_District</th>\n",
       "      <th>Neighborhooods_-_Analysis_Boundaries</th>\n",
       "      <th>RowID</th>\n",
       "      <th>case_location</th>\n",
       "      <th>Analysis_Neighborhoods</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>201340825</td>\n",
       "      <td>T06</td>\n",
       "      <td>20055834</td>\n",
       "      <td>Other</td>\n",
       "      <td>05/13/2020</td>\n",
       "      <td>05/13/2020</td>\n",
       "      <td>05/13/2020 08:51:30 AM</td>\n",
       "      <td>05/13/2020 08:51:30 AM</td>\n",
       "      <td>05/13/2020 08:54:56 AM</td>\n",
       "      <td>05/13/2020 08:55:10 AM</td>\n",
       "      <td>...</td>\n",
       "      <td>Alarm</td>\n",
       "      <td>1</td>\n",
       "      <td>TRUCK</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>Mission</td>\n",
       "      <td>201340825-T06</td>\n",
       "      <td>POINT (-122.42251458613262 37.770727334245194)</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>201241707</td>\n",
       "      <td>FB3</td>\n",
       "      <td>20052084</td>\n",
       "      <td>Outside Fire</td>\n",
       "      <td>05/03/2020</td>\n",
       "      <td>05/03/2020</td>\n",
       "      <td>05/03/2020 01:46:02 PM</td>\n",
       "      <td>05/03/2020 01:46:02 PM</td>\n",
       "      <td>05/03/2020 01:46:11 PM</td>\n",
       "      <td>05/03/2020 01:47:41 PM</td>\n",
       "      <td>...</td>\n",
       "      <td>Alarm</td>\n",
       "      <td>1</td>\n",
       "      <td>SUPPORT</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Financial District/South Beach</td>\n",
       "      <td>201241707-FB3</td>\n",
       "      <td>POINT (-122.3946511276673 37.79530574375478)</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>201083222</td>\n",
       "      <td>AM118</td>\n",
       "      <td>20045948</td>\n",
       "      <td>Medical Incident</td>\n",
       "      <td>04/17/2020</td>\n",
       "      <td>04/17/2020</td>\n",
       "      <td>04/17/2020 09:19:43 PM</td>\n",
       "      <td>04/17/2020 09:19:43 PM</td>\n",
       "      <td>04/17/2020 09:21:10 PM</td>\n",
       "      <td>04/17/2020 09:21:55 PM</td>\n",
       "      <td>...</td>\n",
       "      <td>Non Life-threatening</td>\n",
       "      <td>1</td>\n",
       "      <td>PRIVATE</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>South of Market</td>\n",
       "      <td>201083222-AM118</td>\n",
       "      <td>POINT (-122.41071806030364 37.778959763358266)</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Call_Number Unit_ID  Incident_Number         Call_Type   Call_Date  \\\n",
       "0    201340825     T06         20055834             Other  05/13/2020   \n",
       "1    201241707     FB3         20052084      Outside Fire  05/03/2020   \n",
       "2    201083222   AM118         20045948  Medical Incident  04/17/2020   \n",
       "\n",
       "   Watch_Date           Received_DtTm              Entry_DtTm  \\\n",
       "0  05/13/2020  05/13/2020 08:51:30 AM  05/13/2020 08:51:30 AM   \n",
       "1  05/03/2020  05/03/2020 01:46:02 PM  05/03/2020 01:46:02 PM   \n",
       "2  04/17/2020  04/17/2020 09:19:43 PM  04/17/2020 09:19:43 PM   \n",
       "\n",
       "            Dispatch_DtTm           Response_DtTm  ...       Call_Type_Group  \\\n",
       "0  05/13/2020 08:54:56 AM  05/13/2020 08:55:10 AM  ...                 Alarm   \n",
       "1  05/03/2020 01:46:11 PM  05/03/2020 01:47:41 PM  ...                 Alarm   \n",
       "2  04/17/2020 09:21:10 PM  04/17/2020 09:21:55 PM  ...  Non Life-threatening   \n",
       "\n",
       "  Number_of_Alarms Unit_Type Unit_sequence_in_call_dispatch  \\\n",
       "0                1     TRUCK                              1   \n",
       "1                1   SUPPORT                              2   \n",
       "2                1   PRIVATE                              2   \n",
       "\n",
       "  Fire_Prevention_District Supervisor_District  \\\n",
       "0                        2                   8   \n",
       "1                        1                   3   \n",
       "2                        2                   6   \n",
       "\n",
       "  Neighborhooods_-_Analysis_Boundaries            RowID  \\\n",
       "0                              Mission    201340825-T06   \n",
       "1       Financial District/South Beach    201241707-FB3   \n",
       "2                      South of Market  201083222-AM118   \n",
       "\n",
       "                                    case_location Analysis_Neighborhoods  \n",
       "0  POINT (-122.42251458613262 37.770727334245194)                     20  \n",
       "1    POINT (-122.3946511276673 37.79530574375478)                      8  \n",
       "2  POINT (-122.41071806030364 37.778959763358266)                     34  \n",
       "\n",
       "[3 rows x 35 columns]"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.limit(3).toPandas()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}