【发布时间】:2019-03-29 10:42:45
【问题描述】:
由于严重的 Python 滥用,我正在学习 Scala 中的 Spark,我得到了 java.lang.NullPointerException,因为我正在以 Python 的方式做事。
我说 3 个形状为 4x2 的数据帧,第一列始终是索引 0,1,2,3,第二列是一些二进制特征。最终目标是拥有一个 4x4 数据框,其中包含所有单个数据框的连接。在 python 中,我会首先定义一些主 df,然后遍历中间的,在每个循环中将生成的连接数据帧分配给主数据帧变量名称(丑陋):
dataframes = [temp1, temp2, temp3]
df = pd.DataFrame(index=[0,1,2,3]) # Master df
for temp in dataframes:
df = df.join(temp)
在 Spark 中这不能很好地发挥作用:
q = "select * from table"
val df = sql(q) 明显有效
scala> val df = df.join(sql(q))
<console>:33: error: recursive value df needs type
val df = df.join(sql(q))
好的:
scala> val df:org.apache.spark.sql.DataFrame = df.join(sql(q))
java.lang.NullPointerException
... 50 elided
我认为我很可能没有以实用的方式进行操作。所以我尝试了(最丑!):
scala> :paste
// Entering paste mode (ctrl-D to finish)
sql(q).
join(sql(q), "device_id").
join(sql(q), "device_id").
join(sql(q), "device_id")
// Exiting paste mode, now interpreting.
res128: org.apache.spark.sql.DataFrame = [device_id: string, devtype: int ... 3 more fields]
这只是看起来丑陋、不雅和初学者。实现此目的的适当功能 Scala 方法是什么?
【问题讨论】:
标签: scala apache-spark