{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "cef3e0a4-3a68-41a7-bb25-cd722526b09c", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "outputs": [], "source": [ "from pyspark.sql import SparkSession\n", "from pyspark.sql.functions import rand, round\n", "from pyspark.sql.types import StructType, StructField, IntegerType, FloatType\n", "import matplotlib.pyplot as plt\n", "\n", "# Initialize the Spark session\n", "spark = SparkSession.builder.getOrCreate() # Skip session creation if already connected to Spark" ] }, { "cell_type": "code", "execution_count": 2, "id": "762ceedc-17cb-4bb3-ad23-1f0547986fa3", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 96.54% for 7 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 84.47% for 8 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 75.08% for 9 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 67.58% for 10 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 61.43% for 11 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 56.31% for 12 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 61.43% for 11 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 56.31% for 12 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 51.98% for 13 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 48.27% for 14 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 51.98% for 13 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 48.27% for 14 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 51.98% for 13 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 56.31% for 12 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 61.43% for 11 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 67.58% for 10 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 75.08% for 9 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 84.47% for 8 writers\n", "24/11/09 08:17:45 WARN MemoryManager: Total allocation exceeds 95.00% (906,992,014 bytes) of heap memory\n", "Scaling row group sizes to 96.54% for 7 writers\n", " \r" ] }, { "name": "stdout", "output_type": "stream", "text": [ "+---+-----+\n", "| id|value|\n", "+---+-----+\n", "| 91| 0.97|\n", "| 92| 0.29|\n", "| 93| 0.51|\n", "| 94| 0.83|\n", "| 95| 0.62|\n", "| 96| 0.01|\n", "| 97| 0.76|\n", "| 98| 0.84|\n", "| 99| 0.16|\n", "|100| 0.31|\n", "+---+-----+\n", "only showing top 10 rows\n", "\n" ] } ], "source": [ "# Create an initial DataFrame with only the `id` column\n", "data = [(i,) for i in range(1, 101)] # Generate 100 rows with sequential IDs\n", "schema = StructType([StructField(\"id\", IntegerType(), True)])\n", "df = spark.createDataFrame(data, schema=schema)\n", "\n", "# Add a `value` column with random values, rounded to 2 decimal places\n", "df = df.withColumn(\"value\", round(rand(), 2))\n", "\n", "# Define HDFS path\n", "hdfs_path = \"hdfs:///share/test_data\"\n", "\n", "# Write DataFrame to HDFS\n", "df.write.mode(\"overwrite\").parquet(hdfs_path)\n", "\n", "# Read the data back from HDFS\n", "df_hdfs = spark.read.parquet(hdfs_path)\n", "\n", "# Show a sample of the data\n", "df_hdfs.show(10)" ] }, { "cell_type": "code", "execution_count": 3, "id": "6dc3db38-a646-4794-93db-7ffb8b15a557", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIhCAYAAAB5deq6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZ2ElEQVR4nO3de3wU9b3/8fcmQIgxiWAkgEkAPRaWSzELVQGpioI37EFrtbYK1kvFahHRiuh5SKWnQr2XUsALSj1apVZIrXJsqRfqBVuga4smir8KJsQgTbRJjAYIO78/vmdjNtkku2F3Z3bm9Xw8eAyZnc1+ZzO3z8z38/34LMuyBAAAAADoVIbdDQAAAAAApyNwAgAAAIBuEDgBAAAAQDcInAAAAACgGwROAAAAANANAicAAAAA6AaBEwAAAAB0g8AJAAAAALpB4AQAAAAA3SBwAoB2Vq9eLZ/P1/qvV69eGjRokL797W/r/ffft61dP/7xj+Xz+Wz7/LaGDh0a8R119m/16tUJ+bw77rhDZWVlMS/ftg2ZmZnq16+fxo4dq6uuukpvvvlmStsSq3379mn27NkaNGiQMjMzdeyxxyb8MxLp5JNP1ujRo6O+VltbK5/Ppx//+Met81555ZWIv0ufPn10xBFHaNKkSbr11lv14Ycfdvg97ffFtv9uvPHG1uWqqqr0gx/8QF/5yleUnZ2t/v37a8yYMbryyitVVVWV8HUH4E297G4AADjVo48+qhEjRqi5uVmvv/66fvrTn+rll1/Wu+++q379+tndPFutW7dOe/fubf354Ycf1qpVq/TCCy8oPz+/df7RRx+dkM+74447dP7552vGjBkxv+f888/XDTfcIMuy1NDQoLfffluPPfaYHnzwQc2ZM0c///nPU9aWWKxYsUIPPPCAfvGLX2jcuHE69NBDE/r7neKOO+7QKaecogMHDqiurk5/+ctf9Mgjj+i+++7TQw89pO9+97sd3hPeF9saPHiwJGnXrl0KBAI67LDDdMMNN2j48OGqr69XeXm5fvOb3+iDDz5QcXFxStYNgLsROAFAJ0aPHq3x48dLMnfXDxw4oIULF6qsrEzf+973bG6dvUpLSyN+fuGFFyRJ48aNU0FBgR1N6qCwsFAnnHBC68+nn3665s6dq+9///taunSpRowYoauvvtrGFkZ6++23lZ2drWuvvbbL5SzLUnNzs7Kzs1PUssQ65phjIv4u3/jGN3TDDTfotNNO06WXXqqvfvWrGjNmTMR72u6L7T300EOqra3VX//6Vw0bNqx1/owZM3TLLbcoFAolZ0UAeA5d9QAgRuELt48//rh1XnNzs2644QYde+yxys/PV//+/TVhwgT97ne/6/B+n8+na6+9Vv/zP/8jv9+vQw45RGPHjtVzzz3XYdnnn39exx57rLKysjRs2DDdfffdUdvU3NysBQsWaNiwYerTp4+OPPJIXXPNNfr3v/8dsdzQoUM1ffp0PffccyotLVV2drb8fn/rZ69evVp+v185OTk67rjjtGXLlp5+Ta0sy9Ly5ct17LHHKjs7W/369dP555+vDz74IGK5YDCo6dOna8CAAcrKytLgwYN19tlna9euXa3fW1NTk371q1+1dtM6+eSTe9SmzMxMLVu2TAUFBbrrrrta58f6d+yqLf/617/0gx/8QCNHjtShhx6qAQMGaMqUKXr11Ve7bZfP59PDDz+sL774okM3x/B2s3LlSvn9fmVlZelXv/qVJOm1117TqaeeqtzcXB1yyCGaOHGinn/++YjfHe7u9tJLL+nKK6/U4Ycfrry8PM2cOVNNTU3avXu3LrjgAh122GEaNGiQbrzxRu3fv79H329P9e/fXw888IBaWlp03333xfXeuro6ZWRkaMCAAVFfz8jgUgdAYnA0AYAY7dixQ5L0la98pXXe3r179cknn+jGG29UWVmZnnzySZ144ok677zz9Nhjj3X4Hc8//7yWLVumRYsW6ZlnnlH//v117rnnRgQTL774ov7zP/9Tubm5euqpp3TXXXfpN7/5jR599NGI32VZlmbMmKG7775bl1xyiZ5//nnNmzdPv/rVrzRlypSIrnSS9Pe//10LFizQ/PnztXbtWuXn5+u8887TwoUL9fDDD+uOO+7QE088ofr6ek2fPl1ffPHFQX1fV111lebOnavTTjtNZWVlWr58ud555x1NnDixNfhsamrS1KlT9fHHH+uXv/ylNmzYoPvvv18lJSVqbGyUJG3atEnZ2dk666yztGnTJm3atEnLly/vcbuys7N12mmnaceOHa3BWax/x67a8sknn0iSFi5cqOeff16PPvqojjrqKJ188sl65ZVXumzTpk2bdNZZZyk7O7v195599tmtr5eVlWnFihW67bbb9Ic//EGTJ0/W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8ODBGj16tGO2o152N8CtamtrdeDAARUWFkbMLyws1O7du21qFZzMsizNmzdPJ554okaPHi1JrdtKtO3oww8/THkb4RxPPfWU/va3v2nz5s0dXmO7QWc++OADrVixQvPmzdMtt9yiv/71r5ozZ46ysrI0c+ZMth1ENX/+fNXX12vEiBHKzMzUgQMH9NOf/lQXXXSRJI456F4s28ju3bvVp08f9evXr8MyTrl2JnBKMp/PF/GzZVkd5gGSdO211+of//iHXnvttQ6vsR2hraqqKl133XX64x//qL59+3a6HNsN2guFQho/frzuuOMOSVJpaaneeecdrVixQjNnzmxdjm0Hba1Zs0aPP/64fv3rX2vUqFF66623NHfuXA0ePFizZs1qXY7tBt3pyTbipO2IrnpJUlBQoMzMzA4R8p49ezpE28APf/hDPfvss3r55ZdVVFTUOn/gwIGSxHaECFu3btWePXs0btw49erVS7169dLGjRu1dOlS9erVq3XbYLtBe4MGDdLIkSMj5vn9/tZBizjmIJof/ehHuvnmm/Xtb39bY8aM0SWXXKLrr79eixcvlsR2g+7Fso0MHDhQ+/bt06efftrpMnYjcEqSPn36aNy4cdqwYUPE/A0bNmjixIk2tQpOY1mWrr32Wq1du1YvvfSShg0bFvH6sGHDNHDgwIjtaN++fdq4cSPbkYedeuqp2rZtm956663Wf+PHj9d3v/tdvfXWWzrqqKPYbhDVpEmTOpQ82L59u4YMGSKJYw6i+/zzz5WREXnJmJmZ2TocOdsNuhPLNjJu3Dj17t07Ypmamhq9/fbbztmObBuWwgOeeuopq3fv3taqVaus8vJya+7cuVZOTo61c+dOu5sGh7j66qut/Px865VXXrFqampa/33++eetyyxZssTKz8+31q5da23bts266KKLrEGDBlkNDQ02thxO03ZUPctiu0F0f/3rX61evXpZP/3pT63333/feuKJJ6xDDjnEevzxx1uXYdtBe7NmzbKOPPJI67nnnrN27NhhrV271iooKLBuuumm1mXYbtDY2GgFg0ErGAxakqx7773XCgaD1ocffmhZVmzbyOzZs62ioiLrT3/6k/W3v/3NmjJlijV27FirpaXFrtWKQOCUZL/85S+tIUOGWH369LECgUDrMNOAZZnhOqP9e/TRR1uXCYVC1sKFC62BAwdaWVlZ1te//nVr27Zt9jUajtQ+cGK7QWd+//vfW6NHj7aysrKsESNGWA8++GDE62w7aK+hocG67rrrrJKSEqtv377WUUcdZd16663W3r17W5dhu8HLL78c9Zpm1qxZlmXFto188cUX1rXXXmv179/fys7OtqZPn25VVlbasDbR+SzLsux51gUAAAAA6YEcJwAAAADoBoETAAAAAHSDwAkAAAAAukHgBAAAAADdIHACAAAAgG4QOAEAAABANwicAAAAAKAbBE4AAAAA0A0CJwAAAADoBoETAMD1Lr30Us2YMaP1/z6fTz6fT71791ZhYaGmTp2qRx55RKFQyN6GAgAci8AJAOA5Z5xxhmpqarRz50797//+r0455RRdd911mj59ulpaWuxuHgDAgXrZ3QAAAFItKytLAwcOlCQdeeSRCgQCOuGEE3Tqqadq9erVuuKKK2xuIQDAaXjiBACApClTpmjs2LFau3at3U0BADgQgRMAAP9nxIgR2rlzp93NAAA4EIETAAD/x7Is+Xw+u5sBAHAgAicAAP5PRUWFhg0bZnczAAAOROAEAICkl156Sdu2bdM3v/lNu5sCAHAgRtUDAHjO3r17tXv3bh04cEAff/yxXnjhBS1evFjTp0/XzJkz7W4eAMCBCJwAAJ7zwgsvaNCgQerVq5f69eunsWPHaunSpZo1a5YyMuiMAQDoyGdZlmV3IwAAAADAybitBgAAAADdIHACAAAAgG4QOAEAAABANwicAAAAAKAbBE4AAAAA0A0CJwAAAADoBoETAAAAAHSDwAkAAAAAukHgBAAAAADdIHACAAAAgG4QOAEAAABAN/4/8VF+xO2m+0YAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Collect data to Pandas for plotting (only small data)\n", "df_pandas = df_hdfs.toPandas()\n", "\n", "# Plotting the data\n", "plt.figure(figsize=(10, 6))\n", "plt.scatter(df_pandas[\"id\"], df_pandas[\"value\"], color=\"blue\", alpha=0.5)\n", "plt.xlabel(\"ID\")\n", "plt.ylabel(\"Value\")\n", "plt.title(\"Random Test Data from HDFS\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "55a9a3da-1648-4180-8218-f6913f6cbe4b", "metadata": {}, "outputs": [], "source": [] } ], "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.10.15" } }, "nbformat": 4, "nbformat_minor": 5 }