【问题标题】:Can't export data from a spark dataframe无法从 spark 数据框中导出数据
【发布时间】:2021-10-04 19:38:29
【问题描述】:

我使用 spark NLP 解析了 50 万条推文作为测试。数据框看起来不错。我将数组转换为字符串。使用

from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

def array_to_string(my_list):
    return '[' + ','.join([str(elem) for elem in my_list]) + ']'

array_to_string_udf = udf(array_to_string, StringType())

result = result.withColumn('token', array_to_string_udf(result["token"])).withColumn('ner', array_to_string_udf(result["ner"])).withColumn('embeddings', array_to_string_udf(result["embeddings"])).withColumn('ner_chunk', array_to_string_udf(result["ner_chunk"])).withColumn('document', array_to_string_udf(result["document"]))

数据框看起来不错。但是,每当我尝试将其转换为 pandas 时,将其导出为 csv 我都会收到以下错误

PythonException: 
  An exception was thrown from the Python worker. Please see the stack trace below.
Traceback (most recent call last):
  File "C:\spark\spark-3.1.2-bin-hadoop3.2\python\lib\pyspark.zip\pyspark\worker.py", line 584, in main
  File "C:\spark\spark-3.1.2-bin-hadoop3.2\python\lib\pyspark.zip\pyspark\serializers.py", line 562, in read_int
    length = stream.read(4)
  File "C:\ProgramData\Anaconda3\lib\socket.py", line 669, in readinto
    return self._sock.recv_into(b)
socket.timeout: timed out

这让我觉得 spark 不是在和 python 说话。有谁知道可能是什么问题?

【问题讨论】:

    标签: pyspark johnsnowlabs-spark-nlp


    【解决方案1】:

    拨打toPandas

    所有数据都加载到驱动程序的内存中

    调用toPandas的效果和调用collect的效果基本一样。

    将数据帧的内容写入 csv 的更好方法是直接使用 PySpark 的 DataFrameWriter

    result.write.csv('my_result.csv')
    

    编辑:可能与问题没有直接关系,但可以将 udf 替换为原生 Spark 函数(litconcatconcat_ws):

    from pyspark.sql import functions as F
    
    result.withColumn("token", F.concat(F.lit("["), F.concat_ws(",", "token"),F.lit("]")))....
    

    用 Spark 函数替换 udf 将提高性能。

    【讨论】:

    • 感谢您的回答,但无论我尝试导出到 csv 还是调用 toPandas 函数,都会出现引用的错误
    • @ViktorAvdulov 您能否尝试使用limit 限制数据量? result.limit(100).write.csv('my_result.csv') 是否返回相同的错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2016-12-12
    • 1970-01-01
    • 2013-09-05
    • 2020-02-15
    • 1970-01-01
    • 2018-06-17
    相关资源
    最近更新 更多