首先,我的mysql版本为
用pyspark连接数据库进行输出某表的内容
from pyspark.sql import SparkSession
if __name__ == "__main__":
"""
从mysql查询数据
"""
spark = SparkSession.builder.getOrCreate()
url="jdbc:mysql://192.168.1.105:3306/tylg?serverTimezone=Asia/Shanghai"
user="root"
password="123456"
# 下方如果用的是mysql-connector8.0的要用加cj,若是5.多则不用】
dirver="com.mysql.cj.jdbc.Driver"
#创建数据库连接,查询所有数据
mysql_df=spark.read.format("jdbc").option("url",url).option("dirver",dirver)\
.option("dbtable","customerinfo").option("user",user).option("password",password).load()
print(type(mysql_df))
mysql_df.show()
这种情况出现了乱码
付航那个是我修复好的,而下面那个的uname就是乱码
用pyspark连接数据库进行输入某表数据
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, Row
if __name__ == "__main__":
"""
从mysql查询数据
"""
spark = SparkSession.builder.getOrCreate()
# 定义要插入的数据
ls = ["NO11,谢,800000", "NO12,杨,100000", "NO13,首,120000", "NO14,玉,300000"]
# 将列表数据转换为rdd
customerinfo_rdd = spark.sparkContext.parallelize(ls).map(lambda x: x.split(","))
# 创建schema对象
schema=StructType\
(
[ StructField("num",StringType(),True),
StructField("uname",StringType(),True),
StructField("amount", StringType(), True)
]
)
# 构建行对象row
row_rdd = customerinfo_rdd.map(lambda x: Row(x[0].strip(), x[1].strip(), x[2].strip()))
# 将schema应用到rdd上,使用createDataFrame创建DataFrame
customerinfo_df = spark.createDataFrame(row_rdd, schema)
# customerinfo_df = customerinfo_rdd.map(lambda x: Row(num=x[0], uname=x[1], amount=x[2])).toDF()
# 等价于上面的createDataFrame(row_rdd, schema)
# 构建连接数据库的参数
database_conf = {}
database_conf["user"] = "root"
database_conf["password"] = "123456"
database_conf["dirver"] = "com.mysql.cj.jdbc.Driver"
customerinfo_df.write.jdbc("jdbc:mysql://192.168.1.105:3306/tylg?serverTimezone=Asia/Shanghai",
"customerinfo", "append", database_conf)
这种插入后显示下面的情况
英文能正常插入而中文显示???
后来使用
show variables like '%char%';命令查看mysql的字符编码如下
发现是mysql默认的Latin1编码,需要改成其他,刚开始改的是utf8,而使用命令
SET character_set_client = 'utf8';
SET character_set_connection='utf8';
SET character_set_server = 'utf8';
SET character_set_results = 'utf8';
改了之后重启mysql有变成原来的样子,这时候发现要在配置文件中修改,在mysql安装文件的my.ini修改
打开后把下图的两个位置改成了utf8
但是还是不行,甚至出现了数据库插入的时候显示这种错误
后来把这两个位置改成了gbk
插入成功了
而且python上运行查看数据也成功了
而且运行插入数据也成功了
还有就是注意创建表的时候最后要加上字符码为utf8;
来源:CSDN
作者:qq_20493629
链接:https://blog.csdn.net/qq_20493629/article/details/104458843