使用 Apache Spark 进行分析

本教程介绍使用 Apache Spark for Azure Synapse 加载和分析数据的基本步骤。

创建无服务器 Apache Spark 池

  1. 在 Synapse Studio 的左侧窗格中,选择“管理”>“Apache Spark 池” 。
  2. 选择“新建”
  3. 对于“Apache Spark 池名称”,请输入“Spark1” 。
  4. 对于“节点大小”,请输入“小” 。
  5. 对于“节点数”,请将最小值设置为 3,将最大值设置为 3
  6. 选择“查看 + 创建”>“创建”。 你的 Apache Spark 池将在几秒钟内准备就绪。

了解无服务器 Apache Spark 池

无服务器 Spark 池是一种用于指示用户要如何使用 Spark 的方式。 开始使用池时,系统会根据需要创建 Spark 会话。 池控制该会话将使用多少个 Spark 资源,以及会话在自动暂停之前的持续时间。 需要为在该会话期间使用的 spark 资源付费,而不是为池本身付费。 这样,Spark 池可让你使用 Apache Spark,而无需管理群集。 这类似于无服务器 SQL 池的工作方式。

使用 Spark 池分析纽约市出租车数据

注意

请确保已将示例数据放入主存储帐户

  1. 在 Synapse Studio 中,转到“开发”中心。

  2. 创建新的笔记本。

  3. 创建新代码单元并将以下代码粘贴到该单元中:

    %%pyspark
    df = spark.read.load('abfss://users@contosolake.dfs.core.chinacloudapi.cn/NYCTripSmall.parquet', format='parquet')
    display(df.limit(10))
    
  4. 修改加载 URI,使其根据 abfss URI 方案引用存储帐户中的示例文件。

  5. 在笔记本的“附加到”菜单中,选择之前创建的 Spark1 无服务器 Spark 池 。

  6. 选择单元上的“运行”。 如果需要,Synapse 将启动新的 Spark 会话来运行此单元格。 如果需要新的 Spark 会话,最初将需要大约 2 到 5 分钟的时间来创建。 创建会话后,执行单元格大约需要 2 秒。

  7. 如果只想查看数据帧的架构,请通过以下代码运行单元:

    %%pyspark
    df.printSchema()
    

将纽约市出租车数据加载到 Spark nyctaxi 数据库

数据可通过名为 df 的数据帧进行访问。 将其加载到名为 nyctaxi 的 Spark 数据库。

  1. 在笔记本中新增一个代码单元,然后输入以下代码:

    %%pyspark
    spark.sql("CREATE DATABASE IF NOT EXISTS nyctaxi")
    df.write.mode("overwrite").saveAsTable("nyctaxi.trip")
    

使用 Spark 和笔记本分析纽约市出租车数据

  1. 创建新代码单元并输入以下代码。

    %%pyspark
    df = spark.sql("SELECT * FROM nyctaxi.trip") 
    display(df)
    
  2. 运行该单元以显示我们加载到 nyctaxi Spark 数据库中的纽约市出租车数据。

  3. 创建新代码单元并输入以下代码。 我们会分析此数据,并将结果保存到名为“nyctaxi.passengercountstats”的表中。

    %%pyspark
    df = spark.sql("""
       SELECT passenger_count,
           SUM(trip_distance) as SumTripDistance,
           AVG(trip_distance) as AvgTripDistance
       FROM nyctaxi.trip
       WHERE trip_distance > 0 AND passenger_count > 0
       GROUP BY passenger_count
       ORDER BY passenger_count
    """) 
    display(df)
    df.write.saveAsTable("nyctaxi.passengercountstats")
    
  4. 在单元结果中,选择“图表”以查看直观呈现出来的数据。

后续步骤