【发布时间】:2016-07-26 14:02:51
【问题描述】:
我在获取文件名时使用 Python Spark API 时遇到问题。例如
recordDataFrame=originalDataFrame \
.withColumn('file_name',input_file_name())
将file_name列添加到dataFrame。该列添加到dataFrame
recordDataFrame.take(1)
上面显示了具有值的列 但是当我将 dataFrame 转换为 RDD 或循环 RDD file_name 列时没有任何价值。
例如,
rdd_data=recordDataFrame.rdd
print(rdd_data.take(1))
这将显示带有空白值的文件名列 或者,如果我直接循环数据帧,那么文件名也没有任何价值
recordDataFrame.foreach(process_data)
但是,如果我在添加列时将静态值传递给 file_name 而不是使用 input_file_name(),那么一切正常
【问题讨论】:
-
这是一个错误。当数据传递给 Python 执行器时,用于获取文件名的所需上下文丢失。应该在 2.0.0 中修复
-
谢谢@zero323。你知道我们如何使用当前的spark 1.6解决这个问题吗?基本上需要dataFrame中每条记录的文件名。有没有办法使用 pySpark 实现这一点?
-
是的,但我怀疑你会喜欢它,而且它是一个严重的黑客攻击。一会儿我会发布一些想法。
标签: python-2.7 apache-spark pyspark apache-spark-sql rdd