我正在连接三个数据帧,一切都没问题,但是当我在最终数据帧上调用"display"方法(连接之前的三个数据帧(时,数据砖返回此错误:
java.lang.AssertionError: assertion failed
我正在使用:
%fs head dbfs:/databricks-datasets/iot-stream/data-user/
%fs ls dbfs:/databricks-datasets/iot-stream/data-user/
有人可以帮助我吗?谢谢!
以下是数据框方案:
df_MaximasCalorias
ID:长整型(可为空 = 真(
Max_Calorias:双精度(可为空 = 真(
df_MinCalorias
user_id:长整型(可为空 = 真(
Min_Calorias:双精度(可为空 = 真(
df_MediaCalorias
user_id:长整型(可为空 = 真(
Media_Calorias:双精度(可为空 = 真(
数据帧 = dfCalorias(连接df_MaximasCalorias和df_MinCalorias(
ID:长整型(可为空 = 真(
Max_Calorias:双精度(可为空 = 真(
Min_Calorias:双精度(可为空 = 真(
数据帧 = dfCaloriasFinal (连接 dfCalorias 和 df_MediaCalorias(
ID:长整型(可为空 = 真(
Max_Calorias:双精度(可为空 = 真(
Min_Calorias:双精度(可为空 = 真(
- Media_Calorias:双精度(可为空 = 真(
这是完整的代码:
更改列名称
df_MaximasCalorias = df_MaximasCalorias.withColumnRenamed("user_id","ID").withColumnRenamed("max(calories_burnt)","Max_Calorias")
df_MinimasCalorias = df_MinimasCalorias.withColumnRenamed("min(calories_burnt)","Min_Calorias") df_MediaCalorias = df_MediaCalorias.withColumnRenamed("avg(calories_burnt)","Media_Calorias")
创建联接表达式
joinExpression = df_MaximasCalorias["ID"] == df_MinimasCalorias['user_id']
首次加入
dfCalorias = df_MaximasCalorias.join(df_MinimasCalorias, joinExpression, "inner").select("ID","Max_Calorias","Min_Calorias") dfCalorias.show()
显示数据。完美工作
display(dfCalorias)
现在,使用df_MediaCalorias
连接新的数据框dfCalorias
joinExpression = dfCalorias["ID"] == df_MediaCalorias['user_id']
dfCaloriasFinal = dfCalorias.join(df_MediaCalorias, joinExpression, "inner").select("ID","Max_Calorias","Min_Calorias","Media_Calorias")
此代码出错
display(dfCaloriasFinal)
我很欣赏详细的问题!我很确定你的错误是这个陈述
joinExpression = dfCalorias["ID"] == df_MediaCalorias['user_id']
这会将joinExpression
设置为布尔值,因为您将其设置为等于比较。你最好在函数本身中编写连接方程
dfCaloriasFinal = dfCalorias.join(df_MediaCalorias, dfCalorias["ID"] == df_MediaCalorias['user_id'], "inner").select("ID","Max_Calorias","Min_Calorias","Media_Calorias")