You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks中使用Jupyter文件上传组件读取本地文件超时问题求助

Databricks笔记本本地文件上传超时问题解决建议

问题背景

  • 尝试在Databricks笔记本中使用Jupyter组件(ipywidgets/ipyvuetify)读取本地文件
  • ipywidgets的文件上传功能被Databricks官方限制,无法使用
  • 改用ipyvuetify的FileInput组件后,文件选择功能正常,但调用read()方法时触发超时异常

尝试的代码

from ipyvuetify.extra import FileInput
file_input = FileInput()
file_input
files = file_input.get_files()
data = files[0]['file_obj'].read()
data

报错信息

Exception                                 Traceback (most recent call last)
File <command-2037501063098494>:1
----> 1 data = files[0]['file_obj'].read()
      2 data

File /lib/python3.9/site-packages/ipyvuetify/extra/file_input.py:147, in ClientSideFile.readall(self)
    146 def readall(self):
--> 147     return self.read(self.size - self.offset)

File /lib/python3.9/site-packages/ipyvuetify/extra/file_input.py:143, in ClientSideFile.readinto(self, buffer)
    140         self.widget.update_stats(self.file_index, chunk_size)
    141         await process_messages()
--> 143 asyncio.run(read_all())
    144 return size

File /databricks/python/lib/python3.9/site-packages/nest_asyncio.py:35, in _patch_asyncio.<locals>.run(main, debug)
     33 task = asyncio.ensure_future(main)
     34 try:

解决建议

针对ipyvuetify超时问题的修复

  • 调整异步运行环境:Databricks的nest_asyncio环境可能限制了异步任务的执行时间,可尝试重置事件循环配置:
    import asyncio
    asyncio.get_event_loop().set_default_executor(None)
    
  • 分块读取大文件:避免一次性读取整个文件,手动分块读取降低单次请求压力:
    chunk_size = 1024 * 1024  # 按1MB分块读取
    file_obj = files[0]['file_obj']
    data = b''
    while True:
        chunk = file_obj.read(chunk_size)
        if not chunk:
            break
        data += chunk
    

Databricks本地文件上传替代方案

  • 使用内置上传功能:直接通过笔记本界面的「文件」→「上传数据」,将文件上传到DBFS后读取:
    # Spark读取DBFS文件
    df = spark.read.csv("/FileStore/tables/your_uploaded_file.csv")
    # 读取二进制文件内容
    data = dbutils.fs.head("/FileStore/tables/your_binary_file.bin", 1000000)
    
  • 嵌入HTML表单上传:通过HTML+JS将本地文件内容转成Base64传递到Python变量:
    from IPython.display import HTML, display
    import base64
    
    upload_form = HTML("""
    <input type="file" id="fileInput">
    <button onclick="uploadFile()">上传</button>
    <script>
      async function uploadFile() {
        const file = document.getElementById('fileInput').files[0];
        const reader = new FileReader();
        reader.onload = function(e) {
          const base64Data = e.target.result.split(',')[1];
          IPython.notebook.kernel.execute(`file_data = b'${base64Data}'`);
          alert('上传完成');
        };
        reader.readAsDataURL(file);
      }
    </script>
    """)
    display(upload_form)
    
    解码数据:
    decoded_data = base64.b64decode(file_data)
    
  • Databricks CLI上传:本地安装CLI后,通过命令行将文件上传到DBFS:
    databricks fs cp /local/path/your_file.dbfs:/FileStore/tables/your_file
    
    再在笔记本中读取DBFS路径下的文件。

内容的提问来源于stack exchange,提问作者ntnrjdn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:23:15