prophecy-libs 2.1.14.dev101__tar.gz → 2.1.14.dev102__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. {prophecy_libs-2.1.14.dev101/prophecy_libs.egg-info → prophecy_libs-2.1.14.dev102}/PKG-INFO +1 -1
  2. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/diff.py +25 -1
  3. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102/prophecy_libs.egg-info}/PKG-INFO +1 -1
  4. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/setup.py +1 -1
  5. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/LICENSE +0 -0
  6. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/README.md +0 -0
  7. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/__init__.py +0 -0
  8. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/config/__init__.py +0 -0
  9. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/config/config_base.py +0 -0
  10. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/config/utils.py +0 -0
  11. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/datasampling/__init__.py +0 -0
  12. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/datasampling/data_sample_loader.py +0 -0
  13. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/dbxsless/__init__.py +0 -0
  14. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/dbxsless/dbx_serverless_helper.py +0 -0
  15. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/dbxsless/requirements.dbxserverless_sandbox.txt +0 -0
  16. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/__init__.py +0 -0
  17. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/componentruns/__init__.py +0 -0
  18. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/componentruns/component_run_service.py +0 -0
  19. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/componentruns/component_runs_dao.py +0 -0
  20. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/evolutions/__init__.py +0 -0
  21. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/evolutions/delta_metrics_storage_initializer.py +0 -0
  22. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/evolutions/hive_parquet_storage_initializer.py +0 -0
  23. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/evolutions/metrics_storage_initializer.py +0 -0
  24. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/evolutions/models.py +0 -0
  25. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/evolutions/package.py +0 -0
  26. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/execution_metrics_handler.py +0 -0
  27. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/in_memory_store.py +0 -0
  28. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/interims/__init__.py +0 -0
  29. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/interims/delta_interims.py +0 -0
  30. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/interims/hive_parquet_interims.py +0 -0
  31. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/interims/interims_table.py +0 -0
  32. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/logging_spark_session.py +0 -0
  33. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/models.py +0 -0
  34. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/package.py +0 -0
  35. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/pipelineruns/__init__.py +0 -0
  36. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/pipelineruns/pipeline_run_service.py +0 -0
  37. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/pipelineruns/pipeline_runs_dao.py +0 -0
  38. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/schemas/__init__.py +0 -0
  39. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/schemas/em.py +0 -0
  40. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/schemas/external.py +0 -0
  41. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/utils/__init__.py +0 -0
  42. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/utils/common.py +0 -0
  43. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/utils/constants.py +0 -0
  44. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/utils/external.py +0 -0
  45. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/utils/interim_store.py +0 -0
  46. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/workflow_parser.py +0 -0
  47. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/executionmetrics/zip_file.py +0 -0
  48. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/jsonrpc/__init__.py +0 -0
  49. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/jsonrpc/models.py +0 -0
  50. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/libs/__init__.py +0 -0
  51. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/libs/uc_shared_utils.py +0 -0
  52. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/libs/utils.py +0 -0
  53. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/lookups/LookupsBase.py +0 -0
  54. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/lookups/LookupsNative.py +0 -0
  55. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/lookups/__init__.py +0 -0
  56. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/random_data_creator.py +0 -0
  57. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/streaming/__init__.py +0 -0
  58. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/streaming/delta_lake_utils.py +0 -0
  59. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/test/__init__.py +0 -0
  60. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/test/base_test_case.py +0 -0
  61. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/test/utils.py +0 -0
  62. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/udfs/__init__.py +0 -0
  63. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/udfs/rest_api_udf.py +0 -0
  64. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/udfs/sample_udf.py +0 -0
  65. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/udfs/scala_udf_wrapper.py +0 -0
  66. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/__init__.py +0 -0
  67. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/constants.py +0 -0
  68. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/data_profiler.py +0 -0
  69. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/databricks_utils.py +0 -0
  70. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/datasampleloader.py +0 -0
  71. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/__diff.py +0 -0
  72. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/__init__.py +0 -0
  73. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/_dill.py +0 -0
  74. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/_objects.py +0 -0
  75. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/_shims.py +0 -0
  76. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/detect.py +0 -0
  77. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/logger.py +0 -0
  78. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/objtypes.py +0 -0
  79. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/pointers.py +0 -0
  80. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/session.py +0 -0
  81. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/settings.py +0 -0
  82. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/source.py +0 -0
  83. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/dill/temp.py +0 -0
  84. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/__init__.py +0 -0
  85. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/__main__.py +0 -0
  86. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/cli.py +0 -0
  87. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/config.py +0 -0
  88. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/custom_typing.py +0 -0
  89. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/decode/__init__.py +0 -0
  90. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/decode/codes.py +0 -0
  91. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/documentor.py +0 -0
  92. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/exceptions.py +0 -0
  93. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/factory.py +0 -0
  94. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/generator.py +0 -0
  95. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/__init__.py +0 -0
  96. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/address/__init__.py +0 -0
  97. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/address/en/__init__.py +0 -0
  98. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/address/en_US/__init__.py +0 -0
  99. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/date_time/__init__.py +0 -0
  100. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/date_time/en_US/__init__.py +0 -0
  101. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/internet/__init__.py +0 -0
  102. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/internet/en_US/__init__.py +0 -0
  103. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/misc/__init__.py +0 -0
  104. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/misc/en_US/__init__.py +0 -0
  105. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/person/__init__.py +0 -0
  106. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/person/en_US/__init__.py +0 -0
  107. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/phone_number/__init__.py +0 -0
  108. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/phone_number/en_US/__init__.py +0 -0
  109. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/python/__init__.py +0 -0
  110. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/providers/python/en_US/__init__.py +0 -0
  111. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/proxy.py +0 -0
  112. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/proxy.pyi +0 -0
  113. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/py.typed +0 -0
  114. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/utils/__init__.py +0 -0
  115. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/utils/checksums.py +0 -0
  116. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/utils/datasets.py +0 -0
  117. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/utils/decorators.py +0 -0
  118. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/utils/distribution.py +0 -0
  119. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/utils/loading.py +0 -0
  120. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/faker/utils/text.py +0 -0
  121. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/functions.py +0 -0
  122. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/gems_utils.py +0 -0
  123. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/httpclient.py +0 -0
  124. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/initial_python_code.py +0 -0
  125. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/json_rpc_layer.py +0 -0
  126. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/metagem_utils.py +0 -0
  127. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/monitoring_utils.py +0 -0
  128. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/pipeline_monitoring.py +0 -0
  129. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/request_processor.py +0 -0
  130. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/secrets.py +0 -0
  131. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/synthetic_data_generator.py +0 -0
  132. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/transpiler/__init__.py +0 -0
  133. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/transpiler/abi_base.py +0 -0
  134. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/transpiler/abi_core_fcns.py +0 -0
  135. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/transpiler/abi_fcn_wrapper.py +0 -0
  136. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/transpiler/dataframe_fcns.py +0 -0
  137. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/transpiler/dml_schema.py +0 -0
  138. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/transpiler/fixed_file_schema.py +0 -0
  139. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy/utils/utils.py +0 -0
  140. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy_libs.egg-info/SOURCES.txt +0 -0
  141. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy_libs.egg-info/dependency_links.txt +0 -0
  142. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy_libs.egg-info/not-zip-safe +0 -0
  143. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy_libs.egg-info/requires.txt +0 -0
  144. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/prophecy_libs.egg-info/top_level.txt +0 -0
  145. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/pyproject.toml +0 -0
  146. {prophecy_libs-2.1.14.dev101 → prophecy_libs-2.1.14.dev102}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prophecy_libs
3
- Version: 2.1.14.dev101
3
+ Version: 2.1.14.dev102
4
4
  Summary: Helper library for prophecy generated code
5
5
  Home-page: https://github.com/SimpleDataLabsInc/prophecy-python-libs
6
6
  License: GPL-3.0
@@ -97,6 +97,12 @@ def needs_complex_comparison(data_type):
97
97
  return False
98
98
 
99
99
 
100
+ # When every column is a join key, value structs would otherwise be empty. Spark 3.5+
101
+ # fails in ExpressionEncoder with: "each serializer expression should contain at least
102
+ # one BoundReference". A single bound column avoids an empty `struct()`.
103
+ _EMPTY_VALUE_STRUCT_FIELD = "__prophecy_diff_empty_values_anchor__"
104
+
105
+
100
106
  class DataFrameDiff:
101
107
  COMPUTED_DIFFS = {}
102
108
 
@@ -370,6 +376,20 @@ class DataFrameDiff:
370
376
  for col in value_columns
371
377
  ]
372
378
 
379
+ if not left_value_exprs:
380
+ # No value columns (all columns are keys): empty struct() breaks Spark's encoder.
381
+ anchor_col = key_columns[0]
382
+ left_value_exprs = [
383
+ F.col(DataFrameDiff.prophecy_sc("left", anchor_col)).alias(
384
+ _EMPTY_VALUE_STRUCT_FIELD
385
+ )
386
+ ]
387
+ right_value_exprs = [
388
+ F.col(DataFrameDiff.prophecy_sc("right", anchor_col)).alias(
389
+ _EMPTY_VALUE_STRUCT_FIELD
390
+ )
391
+ ]
392
+
373
393
  left_struct = F.struct(*left_value_exprs).alias("left_values")
374
394
  right_struct = F.struct(*right_value_exprs).alias("right_values")
375
395
 
@@ -489,7 +509,11 @@ class DataFrameDiff:
489
509
 
490
510
  comparison_struct = "compared_values"
491
511
 
492
- fields = joined_df.select(f"{comparison_struct}.*").columns
512
+ fields = [
513
+ c
514
+ for c in joined_df.select(f"{comparison_struct}.*").columns
515
+ if c != _EMPTY_VALUE_STRUCT_FIELD
516
+ ]
493
517
 
494
518
  # Build aggregators for match and mismatch counts for each specified column
495
519
  per_column_aggregators = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prophecy_libs
3
- Version: 2.1.14.dev101
3
+ Version: 2.1.14.dev102
4
4
  Summary: Helper library for prophecy generated code
5
5
  Home-page: https://github.com/SimpleDataLabsInc/prophecy-python-libs
6
6
  License: GPL-3.0
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="prophecy_libs",
5
- version="2.1.14.dev101",
5
+ version="2.1.14.dev102",
6
6
  url="https://github.com/SimpleDataLabsInc/prophecy-python-libs",
7
7
  packages=find_packages(exclude=["test.*", "test"]),
8
8
  package_data={