我在使文件名出现问题时使用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))
这将显示带有空值的file_name列 或者如果我直接在dataFrame上循环,那么文件名也没有任何值
recordDataFrame.foreach(process_data)
但是如果我在添加列时将静态值传递给file_name而不是使用input_file_name(),那么一切正常
答案 0 :(得分:1)
这是一个已在2.0.0中解决的错误。
免责声明:
这些是严重的黑客攻击,除非你绝望,否则应该避免。还没有对这些进行适当的测试。如果可以,最好更新。
在加载数据后触发一个shuffle,例如:
recordDataFrame.repartition("file_name")
或
recordDataFrame.orderBy("file_name")
如high-performance-spark/high-performance-spark-examples 所示截断谱系(代码是GPL许可,因此无法在此处复制,但主要思想是访问内部Java RDD,缓存它并重新创建DataFrame):
cutLineage(recordDataFrame)