如何将Scala创建的Spark DataFrame转为Python环境的Pandas DataFrame?
解决方法
你的问题核心是Scala和Python在Databricks中是独立的运行环境,变量不共享,所以Scala单元格里的ViewSQLTable没法直接在Python单元格调用。给你两种可行的解决方式:
方式一:通过临时视图跨语言共享数据
- 在原来的Scala单元格里,把Spark DataFrame注册成临时视图:
val ViewSQLTable= spark.read.jdbc(jdbcURL, "api.meter_asset_enquiry", connectionProperties) // 新增注册临时视图的代码 ViewSQLTable.createOrReplaceTempView("temp_meter_asset") display(ViewSQLTable)
- 在Python单元格里,通过Spark SQL读取这个临时视图,再转成Pandas DataFrame:
%python # 读取临时视图得到Spark DataFrame spark_df = spark.sql("SELECT * FROM temp_meter_asset") # 转成Pandas DataFrame pandasDF = spark_df.toPandas() print(pandasDF)
方式二:直接用Python读取JDBC数据
既然最终要在Python环境处理,也可以跳过Scala,直接用Python写JDBC读取逻辑:
%python # 替换成你的实际连接信息 jdbcURL = "jdbc:sqlserver://你的服务器地址:1433;databaseName=你的数据库名" connectionProperties = { "user": "你的用户名", "password": "你的密码", "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver" } # 直接读取成Spark DataFrame,再转Pandas spark_df = spark.read.jdbc(jdbcURL, "api.meter_asset_enquiry", connectionProperties) pandasDF = spark_df.toPandas() print(pandasDF)
注意事项
如果表的数据量很大,toPandas()会把全量数据拉到Driver节点,可能触发内存溢出。这种情况下建议先通过filter()或者sample()过滤/采样数据,再转成Pandas DataFrame。
内容的提问来源于stack exchange,提问作者teelove
相关产品推荐
相关产品推荐

