sparkSQL 访问HDFS on jupyter notebook

在jupyter notebook 交互式界面中,使用sparksql  访问hdfs的数据,并转换为临时视图,通过sql进行查询。在此过程中遇到的问题。
源码如下:
from pyspark.sql import SparkSession
try:
    sc.stop()  
except:
    pass
spk = SparkSession.builder.master("spark://192.168.12.7:7077").appName("spark1").getOrCreate()
print(spk)
sc11=spk.sparkContext
print(sc11)
df = spk.read.json("hdfs://192.168.12.7:8020/user/hadoop/example/src/main/resources/people.json")
df.show()
df.createOrReplaceTempView("people1")
sqldf=spk.sql("select * from people1 where age > 20")
sqldf.show()
1.让提交的代码在spark集群中运行
  在起初没有调用 sc.stop()代码块时,也能够正常输出结果,但spark context的输出表明,代码是在本地运行而非预想中的spark集群,在spark集群的webui界面中也看不到对应的应用。
  
 
 原因: jupyter notebook在启动时,默认会调用一个本地的shell。如果需要建立到spark集群的shell,需要关闭sc,然后重建会话。

2. hdfs访问
   hdfs文件的访问,可以通过hdfs dfs -ls   / 命令查看对应的文件。
3. metastore_db的问题
  官方文档中, dataframe在存储永久表时会使用内嵌的derby数据库。由于我没有安装hive,因此很多文档中所说的mysql替代derby数据库也无法成立(?)。
  根据网上的介绍的方法采用了简单粗暴的方式: 将SPARK_HOME/bin/下的metastore_db 删除,在启动kernel时系统会自动重建。
 
 

 
  


你可能感兴趣的:(sparkSQL 访问HDFS on jupyter notebook)