【问题标题】:How do I load a local file onto Spark using a Jupyter notebook in an EMR cluster?如何使用 EMR 集群中的 Jupyter 笔记本将本地文件加载到 Spark?
【发布时间】:2019-10-24 13:55:56
【问题描述】:

我正在努力将 EMR 核心节点上的本地文件加载到 Spark 并运行 Jupyter 笔记本。我不断从任务节点收到错误消息,说该文件不存在,但我尝试将spark 配置设置为local,所以我不确定如何解决这个问题。当我启动一个 1 节点集群时,以下工作有效,但当我有比这更大的集群时失败:

spark = SparkSession.builder \
        .master("local") \
        .appName("Test") \

df = spark.read.csv('/home/hadoop/dataset.csv')

df.show(n=5)

我已尝试重新启动 Jupyter 笔记本内核,但这并没有解决任何问题。所以我想知道如何将本地文件广播/共享到整个集群,或者创建一个有效的SparkSession 实例。我也在使用新的 AWS JupyterHub,如果这有什么不同的话

【问题讨论】:

  • 您是否尝试通过spark-submit --files /home/hadoop/dataset.csv ... 选项将其分发给执行者?此外,在尝试读取时使用"file:///home/hadoop/dataset.csv" 以指示本地文件系统。
  • hmm 所以如果我使用 spark-submit 命令并将代码放在 python 文件中,这将有效。但我仍然无法在 Jupyter 笔记本上使用它。诚然,我对自己能做什么感到困惑。
  • 你可以在本地读取文件(通过pandas?),然后从那里读取createDataFramespark.apache.org/docs/2.2.0/api/python/…

标签: apache-spark pyspark jupyter-notebook


【解决方案1】:

我也无法让它工作,这是我的解决方法:
(假设您的问题也出在 Amazon EMR 中,并且您可以使用 S3 存储桶)

  1. (服务 -> 存储 -> S3 -> 创建存储桶 -> 存储桶名称:“emr-data-”*
  2. 将“dataset.csv”上传到您的 S3 存储桶“emr-data...”
  3. 在 JupyterNotebook 中:
    #store URL: 
    url = "s3n://emr-data-<account#>/dataset.csv"  
    
    #read json from URL  
    df = spark.read.csv(url, header=True)
    
    #show first 5 rows of data frame
    df.show(n=5)
    

生成的 spark 数据帧“df”可以照常使用

(* S3 存储桶的名称必须是唯一的,因此在名称中添加您自己的帐号是实现此目的的一种简单方法。此外,在名称中添加区域 (emr-bucket-123456789012-eu-central-1 ) 是很好的做法)

【讨论】:

    最近更新 更多