PySpark 1.6.1 DataFrame.write.parquet 作业未完成

PySpark 1.6.1 DataFrame.write.parquet job not finishing

我有这个代码:

data_frame.write.parquet(
    '/tmp/test' , 'overwrite',
    partitionBy=None)

这是它的架构:

root
 |-- A: string (nullable = true)
 |-- timestamp: timestamp (nullable = true)
 |-- B: integer (nullable = true)
 |-- C: integer (nullable = true)
 |-- D: long (nullable = true)
 |-- E: string (nullable = true)
 |-- F: string (nullable = true)
 |-- G: string (nullable = true)
 |-- K: string (nullable = true)
 |-- L: string (nullable = true)
 |-- M: string (nullable = true)
 |-- N: long (nullable = true)

它卡在那条线上并且永远不会结束(它有大约一千行并且在两个小时后它没有完成)并且如果我取消作业,输出结束如下:

File "myfile.py", line <my line>, in my_method
    partitionBy=None)
  File "/usr/local/spark/python/lib/pyspark.zip/pyspark/sql/readwriter.py", line 471, in parquet
  File "/usr/local/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 811, in __call__
  File "/usr/local/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 626, in send_command
  File "/usr/local/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 740, in send_command
  File "/usr/lib64/python2.7/socket.py", line 430, in readline
    data = recv(1)
  File "/usr/local/spark/python/lib/pyspark.zip/pyspark/context.py", line 225, in signal_handler
KeyboardInterrupt

注意:此代码适用于该数据框中的一行

有什么想法吗?

谢谢!

更新--------------------

这适用于由一个 json 创建的数据框,但在多个

时失败

可能遇到此问题的人:

就我而言,问题在于代码执行了以下操作:

  • 使用传入数据创建 DF
  • 将该 DF 转换为 RDD
  • 对该 RDD 进行一些转换
  • 再次变身DF

对于 pyspark,处理 RDD 是一种昂贵的方式,所以只要我更改了一段代码,而不是将 DF 转换为 RDD,然后再转换回 DF,并创建了一些基本的 DF 转换,问题就解决了。

干杯