spark

bug

2018-04-16  本文已影响28人  Frank_8942

DataFrame报 notFoundClass any类

=>DataFrame数据的类型为: row, 且每个row对象存储的值为 any,应该将any对象转化为 string等类型

spark程序 notFoundClass sparkSession 或者 hadoop.fs等错误

=>本质上,包缺失导致的类缺失, 需要在pom文件中重新导包,并且scoop不能定义为  provided

Intellij IDEA 编译提示:  "Test is already defined as object Test"

=>test对象已经被定义了,说明有多个test对象, 确认自己只写了一个Test,发现原来是创建工程的时候,文件夹main和scala都定义为Sources,把最顶层的目录 main 的Source 属性去掉,解决

打jar包在集群中运行spark程序, 不能加载配置信息

=>spark-submit master=资源模式 class=运行类 files=加载的参数 executor=一系列参数 

注: jars 是分发给每个executor的包资源

注: files 是分发给每个executor的配置参数文件

通过 某个节点  来查找的webui页面

=> 通过个人连接的机器来查找hosts,来获取ip的映射关系,  使用 whereis  命令查找zk, yarn, namenode, resourceManager 等配置参数文件

spark2.x 读取hive数据

=>最关键的是, 一定要在files 中加上 hive-site.xml配置文件,这样spark才能连接到hive数据库, 直接使用sparkSession.sql(" ")命令读取hive表数据 ( 理解spark on hive 运行模式  )

spark 时间数据类型

=>时间戳格式的数据在ludp上查询是long类型数字,但是在程序运行阶段是"yyyy-MM-dd hh:mm:ss"

spark 加载mysql数据报错:  没有发现Driver驱动类

=>spark使用mysql中的数据,最好使用 spark.read.format("jdbc").options(Map(xxx)).load

如果使用 spark.read.jdbc()   会报错

将DataFrame数据写入 hive 分区表

spark.sql(" insert into insertTableName partition( month=xx, day=xx ) select column1,column2 from sourceTable ")

注意: 因为hive是读时模式,所以 两个表的字段名可以不相同,但是字段数量必须一样,准确来说,只要把表数据存放在此分区目录下就可以了

Caused by: java.net.URISyntaxException: Relative path in absolute URI: file:D:/IDEA/workspaces/mvn5/spark-warehouse

解决:

It's the SPARK-15565 issue in Spark 2.0 on Windows with a simple solution (that appears to be part of Spark's codebase that may soon be released as 2.0.2 or 2.1.0).

The solution in Spark 2.0.0 is to set spark.sql.warehouse.dir to some properly-referenced directory, say file:///c:/Spark/spark-2.0.0-bin-hadoop2.7/spark-warehouse that uses /// (triple slashes)

此处需要将spark.sql.warehouse.dir指定到本地正确的仓库地址,修改代码为:

=>SparkSession.builder() .appName("1") .master("local").config("spark.sql.warehouse.dir", "file:///E:\\apache\\jartest\\mvndatabase") .getOrCreate()

上一篇下一篇

猜你喜欢

热点阅读